]> git.karo-electronics.de Git - karo-tx-linux.git/commit
drm/irq: remove cargo-culted locking from irq_install/uninstall
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Sun, 3 Nov 2013 19:27:05 +0000 (20:27 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 22 Apr 2014 09:41:12 +0000 (11:41 +0200)
commite090c53b21e97864a25ada5c8437d9776978a050
tree123bc619a4f92c72f483f95358517140f35291e1
parent22471cf638bab5d78ee1e6c465c9d7c1971ebbf5
drm/irq: remove cargo-culted locking from irq_install/uninstall

The dev->struct_mutex locking in drm_irq.c only protects
dev->irq_enabled. Which isn't really much at all and only prevents
especially nasty ums userspace from concurrently installing the
interrupt handling a few times. Or at least trying.

There are tons of unlocked readers of dev->irqs_enabled in the vblank
wait code (and by extension also in the pageflip code since that uses
the same vblank timestamp engine).

Real modesetting drivers should ensure that nothing can go haywire
with a sane setup teardown sequence. So we only really need this for
the drm_control ioctl, everywhere else this will just paper over
nastiness.

Note that drm/i915 is a bit specially due to the gem+ums combination.
So there we also need to properly protect the entervt and leavevt
ioctls. But it's definitely saner to do everything in one go than to
drop the lock in-between.

Finally there's the gpu reset code in drm/i915. That one's just race
(concurrent userspace calls to for vblank waits of pageflips could
spuriously fail). So wrap it up in with a nice comment since fixing
this is more involved.

v2: Rebase and fix commit message (Thierry)

Reviewed-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/drm_irq.c
drivers/gpu/drm/i915/i915_drv.c
drivers/gpu/drm/i915/i915_gem.c