diff options
Diffstat (limited to 'drivers/gpu/drm/drm_fops.c')
-rw-r--r-- | drivers/gpu/drm/drm_fops.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 79d5221c6e41..ed7bc68f7e87 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c | |||
@@ -39,10 +39,10 @@ | |||
39 | #include <linux/slab.h> | 39 | #include <linux/slab.h> |
40 | #include <linux/module.h> | 40 | #include <linux/module.h> |
41 | #include "drm_legacy.h" | 41 | #include "drm_legacy.h" |
42 | #include "drm_internal.h" | ||
42 | 43 | ||
43 | /* from BKL pushdown */ | 44 | /* from BKL pushdown */ |
44 | DEFINE_MUTEX(drm_global_mutex); | 45 | DEFINE_MUTEX(drm_global_mutex); |
45 | EXPORT_SYMBOL(drm_global_mutex); | ||
46 | 46 | ||
47 | static int drm_open_helper(struct file *filp, struct drm_minor *minor); | 47 | static int drm_open_helper(struct file *filp, struct drm_minor *minor); |
48 | 48 | ||
@@ -171,7 +171,7 @@ static int drm_open_helper(struct file *filp, struct drm_minor *minor) | |||
171 | init_waitqueue_head(&priv->event_wait); | 171 | init_waitqueue_head(&priv->event_wait); |
172 | priv->event_space = 4096; /* set aside 4k for event buffer */ | 172 | priv->event_space = 4096; /* set aside 4k for event buffer */ |
173 | 173 | ||
174 | if (dev->driver->driver_features & DRIVER_GEM) | 174 | if (drm_core_check_feature(dev, DRIVER_GEM)) |
175 | drm_gem_open(dev, priv); | 175 | drm_gem_open(dev, priv); |
176 | 176 | ||
177 | if (drm_core_check_feature(dev, DRIVER_PRIME)) | 177 | if (drm_core_check_feature(dev, DRIVER_PRIME)) |
@@ -256,7 +256,7 @@ out_close: | |||
256 | out_prime_destroy: | 256 | out_prime_destroy: |
257 | if (drm_core_check_feature(dev, DRIVER_PRIME)) | 257 | if (drm_core_check_feature(dev, DRIVER_PRIME)) |
258 | drm_prime_destroy_file_private(&priv->prime); | 258 | drm_prime_destroy_file_private(&priv->prime); |
259 | if (dev->driver->driver_features & DRIVER_GEM) | 259 | if (drm_core_check_feature(dev, DRIVER_GEM)) |
260 | drm_gem_release(dev, priv); | 260 | drm_gem_release(dev, priv); |
261 | put_pid(priv->pid); | 261 | put_pid(priv->pid); |
262 | kfree(priv); | 262 | kfree(priv); |
@@ -268,11 +268,11 @@ static void drm_master_release(struct drm_device *dev, struct file *filp) | |||
268 | { | 268 | { |
269 | struct drm_file *file_priv = filp->private_data; | 269 | struct drm_file *file_priv = filp->private_data; |
270 | 270 | ||
271 | if (drm_i_have_hw_lock(dev, file_priv)) { | 271 | if (drm_legacy_i_have_hw_lock(dev, file_priv)) { |
272 | DRM_DEBUG("File %p released, freeing lock for context %d\n", | 272 | DRM_DEBUG("File %p released, freeing lock for context %d\n", |
273 | filp, _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock)); | 273 | filp, _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock)); |
274 | drm_lock_free(&file_priv->master->lock, | 274 | drm_legacy_lock_free(&file_priv->master->lock, |
275 | _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock)); | 275 | _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock)); |
276 | } | 276 | } |
277 | } | 277 | } |
278 | 278 | ||
@@ -330,8 +330,6 @@ static void drm_legacy_dev_reinit(struct drm_device *dev) | |||
330 | */ | 330 | */ |
331 | int drm_lastclose(struct drm_device * dev) | 331 | int drm_lastclose(struct drm_device * dev) |
332 | { | 332 | { |
333 | struct drm_vma_entry *vma, *vma_temp; | ||
334 | |||
335 | DRM_DEBUG("\n"); | 333 | DRM_DEBUG("\n"); |
336 | 334 | ||
337 | if (dev->driver->lastclose) | 335 | if (dev->driver->lastclose) |
@@ -346,13 +344,7 @@ int drm_lastclose(struct drm_device * dev) | |||
346 | drm_agp_clear(dev); | 344 | drm_agp_clear(dev); |
347 | 345 | ||
348 | drm_legacy_sg_cleanup(dev); | 346 | drm_legacy_sg_cleanup(dev); |
349 | 347 | drm_legacy_vma_flush(dev); | |
350 | /* Clear vma list (only built for debugging) */ | ||
351 | list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) { | ||
352 | list_del(&vma->head); | ||
353 | kfree(vma); | ||
354 | } | ||
355 | |||
356 | drm_legacy_dma_takedown(dev); | 348 | drm_legacy_dma_takedown(dev); |
357 | 349 | ||
358 | mutex_unlock(&dev->struct_mutex); | 350 | mutex_unlock(&dev->struct_mutex); |
@@ -412,14 +404,14 @@ int drm_release(struct inode *inode, struct file *filp) | |||
412 | drm_master_release(dev, filp); | 404 | drm_master_release(dev, filp); |
413 | 405 | ||
414 | if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)) | 406 | if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)) |
415 | drm_core_reclaim_buffers(dev, file_priv); | 407 | drm_legacy_reclaim_buffers(dev, file_priv); |
416 | 408 | ||
417 | drm_events_release(file_priv); | 409 | drm_events_release(file_priv); |
418 | 410 | ||
419 | if (dev->driver->driver_features & DRIVER_MODESET) | 411 | if (drm_core_check_feature(dev, DRIVER_MODESET)) |
420 | drm_fb_release(file_priv); | 412 | drm_fb_release(file_priv); |
421 | 413 | ||
422 | if (dev->driver->driver_features & DRIVER_GEM) | 414 | if (drm_core_check_feature(dev, DRIVER_GEM)) |
423 | drm_gem_release(dev, file_priv); | 415 | drm_gem_release(dev, file_priv); |
424 | 416 | ||
425 | drm_legacy_ctxbitmap_flush(dev, file_priv); | 417 | drm_legacy_ctxbitmap_flush(dev, file_priv); |
@@ -464,6 +456,8 @@ int drm_release(struct inode *inode, struct file *filp) | |||
464 | if (drm_core_check_feature(dev, DRIVER_PRIME)) | 456 | if (drm_core_check_feature(dev, DRIVER_PRIME)) |
465 | drm_prime_destroy_file_private(&file_priv->prime); | 457 | drm_prime_destroy_file_private(&file_priv->prime); |
466 | 458 | ||
459 | WARN_ON(!list_empty(&file_priv->event_list)); | ||
460 | |||
467 | put_pid(file_priv->pid); | 461 | put_pid(file_priv->pid); |
468 | kfree(file_priv); | 462 | kfree(file_priv); |
469 | 463 | ||