drm: move drm_lastclose() to drm_fops.c
Try to keep all functions that handle DRM file_operations in drm_fops.c so internal helpers can be marked static later. This makes the split between the 3 core files more obvious: - drm_stub.c: DRM device allocation/destruction and management - drm_fops.c: DRM file_operations (except for ioctl) - drm_drv.c: Global DRM init + ioctl handling Well, ioctl handling is still spread throughout hundreds of source files, but at least the others are clearly defined this way. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
committed by
Dave Airlie
parent
c22f0ace19
commit
1c8887dd01
@@ -170,76 +170,6 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
|
|||||||
|
|
||||||
#define DRM_CORE_IOCTL_COUNT ARRAY_SIZE( drm_ioctls )
|
#define DRM_CORE_IOCTL_COUNT ARRAY_SIZE( drm_ioctls )
|
||||||
|
|
||||||
/**
|
|
||||||
* drm_legacy_dev_reinit
|
|
||||||
*
|
|
||||||
* Reinitializes a legacy/ums drm device in it's lastclose function.
|
|
||||||
*/
|
|
||||||
static void drm_legacy_dev_reinit(struct drm_device *dev)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
|
||||||
return;
|
|
||||||
|
|
||||||
atomic_set(&dev->ioctl_count, 0);
|
|
||||||
atomic_set(&dev->vma_count, 0);
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(dev->counts); i++)
|
|
||||||
atomic_set(&dev->counts[i], 0);
|
|
||||||
|
|
||||||
dev->sigdata.lock = NULL;
|
|
||||||
|
|
||||||
dev->context_flag = 0;
|
|
||||||
dev->last_context = 0;
|
|
||||||
dev->if_version = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Take down the DRM device.
|
|
||||||
*
|
|
||||||
* \param dev DRM device structure.
|
|
||||||
*
|
|
||||||
* Frees every resource in \p dev.
|
|
||||||
*
|
|
||||||
* \sa drm_device
|
|
||||||
*/
|
|
||||||
int drm_lastclose(struct drm_device * dev)
|
|
||||||
{
|
|
||||||
struct drm_vma_entry *vma, *vma_temp;
|
|
||||||
|
|
||||||
DRM_DEBUG("\n");
|
|
||||||
|
|
||||||
if (dev->driver->lastclose)
|
|
||||||
dev->driver->lastclose(dev);
|
|
||||||
DRM_DEBUG("driver lastclose completed\n");
|
|
||||||
|
|
||||||
if (dev->irq_enabled && !drm_core_check_feature(dev, DRIVER_MODESET))
|
|
||||||
drm_irq_uninstall(dev);
|
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
|
||||||
|
|
||||||
drm_agp_clear(dev);
|
|
||||||
|
|
||||||
drm_legacy_sg_cleanup(dev);
|
|
||||||
|
|
||||||
/* Clear vma list (only built for debugging) */
|
|
||||||
list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) {
|
|
||||||
list_del(&vma->head);
|
|
||||||
kfree(vma);
|
|
||||||
}
|
|
||||||
|
|
||||||
drm_legacy_dma_takedown(dev);
|
|
||||||
|
|
||||||
dev->dev_mapping = NULL;
|
|
||||||
mutex_unlock(&dev->struct_mutex);
|
|
||||||
|
|
||||||
drm_legacy_dev_reinit(dev);
|
|
||||||
|
|
||||||
DRM_DEBUG("lastclose completed\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** File operations structure */
|
/** File operations structure */
|
||||||
static const struct file_operations drm_stub_fops = {
|
static const struct file_operations drm_stub_fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
|||||||
@@ -385,6 +385,76 @@ static void drm_events_release(struct drm_file *file_priv)
|
|||||||
spin_unlock_irqrestore(&dev->event_lock, flags);
|
spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* drm_legacy_dev_reinit
|
||||||
|
*
|
||||||
|
* Reinitializes a legacy/ums drm device in it's lastclose function.
|
||||||
|
*/
|
||||||
|
static void drm_legacy_dev_reinit(struct drm_device *dev)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return;
|
||||||
|
|
||||||
|
atomic_set(&dev->ioctl_count, 0);
|
||||||
|
atomic_set(&dev->vma_count, 0);
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(dev->counts); i++)
|
||||||
|
atomic_set(&dev->counts[i], 0);
|
||||||
|
|
||||||
|
dev->sigdata.lock = NULL;
|
||||||
|
|
||||||
|
dev->context_flag = 0;
|
||||||
|
dev->last_context = 0;
|
||||||
|
dev->if_version = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Take down the DRM device.
|
||||||
|
*
|
||||||
|
* \param dev DRM device structure.
|
||||||
|
*
|
||||||
|
* Frees every resource in \p dev.
|
||||||
|
*
|
||||||
|
* \sa drm_device
|
||||||
|
*/
|
||||||
|
int drm_lastclose(struct drm_device * dev)
|
||||||
|
{
|
||||||
|
struct drm_vma_entry *vma, *vma_temp;
|
||||||
|
|
||||||
|
DRM_DEBUG("\n");
|
||||||
|
|
||||||
|
if (dev->driver->lastclose)
|
||||||
|
dev->driver->lastclose(dev);
|
||||||
|
DRM_DEBUG("driver lastclose completed\n");
|
||||||
|
|
||||||
|
if (dev->irq_enabled && !drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
drm_irq_uninstall(dev);
|
||||||
|
|
||||||
|
mutex_lock(&dev->struct_mutex);
|
||||||
|
|
||||||
|
drm_agp_clear(dev);
|
||||||
|
|
||||||
|
drm_legacy_sg_cleanup(dev);
|
||||||
|
|
||||||
|
/* Clear vma list (only built for debugging) */
|
||||||
|
list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) {
|
||||||
|
list_del(&vma->head);
|
||||||
|
kfree(vma);
|
||||||
|
}
|
||||||
|
|
||||||
|
drm_legacy_dma_takedown(dev);
|
||||||
|
|
||||||
|
dev->dev_mapping = NULL;
|
||||||
|
mutex_unlock(&dev->struct_mutex);
|
||||||
|
|
||||||
|
drm_legacy_dev_reinit(dev);
|
||||||
|
|
||||||
|
DRM_DEBUG("lastclose completed\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Release file.
|
* Release file.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user