aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_fops.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/drm_fops.c')
-rw-r--r--drivers/gpu/drm/drm_fops.c30
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 */
44DEFINE_MUTEX(drm_global_mutex); 45DEFINE_MUTEX(drm_global_mutex);
45EXPORT_SYMBOL(drm_global_mutex);
46 46
47static int drm_open_helper(struct file *filp, struct drm_minor *minor); 47static 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:
256out_prime_destroy: 256out_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 */
331int drm_lastclose(struct drm_device * dev) 331int 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