summaryrefslogtreecommitdiffstats
path: root/sys/dev/drm/drm_irq.c
diff options
context:
space:
mode:
authorrnoland <rnoland@FreeBSD.org>2009-06-25 14:15:45 +0000
committerrnoland <rnoland@FreeBSD.org>2009-06-25 14:15:45 +0000
commitccfd747271541fc9d5eb3448dba9f53b9fef9de3 (patch)
tree32820de1464a9895fb69b836b2545582155c1c60 /sys/dev/drm/drm_irq.c
parent59a38c2e5e60ebcbdb16921ebe3db82cb31d8faa (diff)
downloadFreeBSD-src-ccfd747271541fc9d5eb3448dba9f53b9fef9de3.zip
FreeBSD-src-ccfd747271541fc9d5eb3448dba9f53b9fef9de3.tar.gz
Ensure that we always hold the lock when calling vblank_disable_fn()
MFC after: 3 days
Diffstat (limited to 'sys/dev/drm/drm_irq.c')
-rw-r--r--sys/dev/drm/drm_irq.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/dev/drm/drm_irq.c b/sys/dev/drm/drm_irq.c
index eb14bb2..b98f2ce 100644
--- a/sys/dev/drm/drm_irq.c
+++ b/sys/dev/drm/drm_irq.c
@@ -70,6 +70,9 @@ static void vblank_disable_fn(void *arg)
struct drm_device *dev = (struct drm_device *)arg;
int i;
+ /* Make sure that we are called with the lock held */
+ mtx_assert(&dev->vbl_lock, MA_OWNED);
+
if (callout_pending(&dev->vblank_disable_timer)) {
/* callout was reset */
return;
@@ -109,7 +112,9 @@ void drm_vblank_cleanup(struct drm_device *dev)
callout_drain(&dev->vblank_disable_timer);
+ DRM_SPINLOCK(&dev->vbl_lock);
vblank_disable_fn((void *)dev);
+ DRM_SPINUNLOCK(&dev->vbl_lock);
free(dev->vblank, DRM_MEM_DRIVER);
OpenPOWER on IntegriCloud