Skip to content

Commit

Permalink
drm/mode: reduce scope of fb_lock in framebuffer init
Browse files Browse the repository at this point in the history
We don't need to hold the fb lock around the initialisation,
only around the list manipulaton.

So do the lock hold only around the register for now.

From Daniel:
Previously fb refcounting, and especially the weak reference
(kref_get_unless_zero) used in fb lookups have been protected by fb_lock.
But with the refactoring to share refcounting in the drm_mode_object base
class that switched to being protected by idr_mutex, which means fb_lock
critical sections can be reduced.

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
  • Loading branch information
Dave Airlie committed Apr 22, 2016
1 parent cee26ac commit 9cd4742
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions drivers/gpu/drm/drm_crtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,21 +458,22 @@ int drm_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *fb,
{
int ret;

mutex_lock(&dev->mode_config.fb_lock);
INIT_LIST_HEAD(&fb->filp_head);
fb->dev = dev;
fb->funcs = funcs;

ret = drm_mode_object_get_reg(dev, &fb->base, DRM_MODE_OBJECT_FB,
true, drm_framebuffer_free);
false, drm_framebuffer_free);
if (ret)
goto out;

mutex_lock(&dev->mode_config.fb_lock);
dev->mode_config.num_fb++;
list_add(&fb->head, &dev->mode_config.fb_list);
out:
mutex_unlock(&dev->mode_config.fb_lock);

drm_mode_object_register(dev, &fb->base);
mutex_unlock(&dev->mode_config.fb_lock);
out:
return ret;
}
EXPORT_SYMBOL(drm_framebuffer_init);
Expand Down

0 comments on commit 9cd4742

Please sign in to comment.