diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-06-14 14:50:57 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-06-16 04:16:37 -0400 |
commit | 1a75a222f5ca1063249b5c92972d32dcc3c8966e (patch) | |
tree | 396a78ce075816b8cd4b6d0a86696016aed7eefb /drivers/gpu/drm/drm_fops.c | |
parent | e1b1cf2f026b75d1b001816f708dc529b7384750 (diff) |
drm: Hide hw.lock cleanup in filp->release better
A few things:
- Rename the cleanup function from drm_master_release to
drm_legacy_lock_release. It doesn't relase any master stuff, but
just the legacy hw lock.
- Hide it in drm_lock.c, which allows us to make a few more functions
static in there. To avoid forward decl we need to shuffle the code a
bit though.
- Push the check for ->master into the function itself.
- Only call this for !DRIVER_MODESET.
End result: Another place that takes struct_mutex gone for good for
modern drivers.
v2: Remove leftover comment.
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1465930269-7883-3-git-send-email-daniel.vetter@ffwll.ch
Diffstat (limited to 'drivers/gpu/drm/drm_fops.c')
-rw-r--r-- | drivers/gpu/drm/drm_fops.c | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index a27bc7cda975..2fd4f42b907a 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c | |||
@@ -338,18 +338,6 @@ out_prime_destroy: | |||
338 | return ret; | 338 | return ret; |
339 | } | 339 | } |
340 | 340 | ||
341 | static void drm_master_release(struct drm_device *dev, struct file *filp) | ||
342 | { | ||
343 | struct drm_file *file_priv = filp->private_data; | ||
344 | |||
345 | if (drm_legacy_i_have_hw_lock(dev, file_priv)) { | ||
346 | DRM_DEBUG("File %p released, freeing lock for context %d\n", | ||
347 | filp, _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock)); | ||
348 | drm_legacy_lock_free(&file_priv->master->lock, | ||
349 | _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock)); | ||
350 | } | ||
351 | } | ||
352 | |||
353 | static void drm_events_release(struct drm_file *file_priv) | 341 | static void drm_events_release(struct drm_file *file_priv) |
354 | { | 342 | { |
355 | struct drm_device *dev = file_priv->minor->dev; | 343 | struct drm_device *dev = file_priv->minor->dev; |
@@ -468,9 +456,8 @@ int drm_release(struct inode *inode, struct file *filp) | |||
468 | (long)old_encode_dev(file_priv->minor->kdev->devt), | 456 | (long)old_encode_dev(file_priv->minor->kdev->devt), |
469 | dev->open_count); | 457 | dev->open_count); |
470 | 458 | ||
471 | /* if the master has gone away we can't do anything with the lock */ | 459 | if (!drm_core_check_feature(dev, DRIVER_MODESET)) |
472 | if (file_priv->minor->master) | 460 | drm_legacy_lock_release(dev, filp); |
473 | drm_master_release(dev, filp); | ||
474 | 461 | ||
475 | if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)) | 462 | if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)) |
476 | drm_legacy_reclaim_buffers(dev, file_priv); | 463 | drm_legacy_reclaim_buffers(dev, file_priv); |