diff options
author | rnoland <rnoland@FreeBSD.org> | 2009-06-25 14:15:45 +0000 |
---|---|---|
committer | rnoland <rnoland@FreeBSD.org> | 2009-06-25 14:15:45 +0000 |
commit | ccfd747271541fc9d5eb3448dba9f53b9fef9de3 (patch) | |
tree | 32820de1464a9895fb69b836b2545582155c1c60 | |
parent | 59a38c2e5e60ebcbdb16921ebe3db82cb31d8faa (diff) | |
download | FreeBSD-src-ccfd747271541fc9d5eb3448dba9f53b9fef9de3.zip FreeBSD-src-ccfd747271541fc9d5eb3448dba9f53b9fef9de3.tar.gz |
Ensure that we always hold the lock when calling vblank_disable_fn()
MFC after: 3 days
-rw-r--r-- | sys/dev/drm/drm_irq.c | 5 |
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); |