diff options
author | Stephane Marchesin <marchesin@icps.u-strasbg.fr> | 2006-10-15 00:12:13 +0200 |
---|---|---|
committer | Stephane Marchesin <marchesin@icps.u-strasbg.fr> | 2006-10-15 00:12:13 +0200 |
commit | 93fee5cf222ad6d97e0dcb85e13a8d8b84dba81f (patch) | |
tree | 4e62581041c93f6ab51e6cafd804e81b5172040f /linux-core/drm_lock.c | |
parent | 2c5b91aecf3d21684ffca758c034cd9a8ed2155d (diff) | |
parent | a9f57a2b9c5897cbf568bf75342204b780566de0 (diff) |
Merge branch 'master' of git://anongit.freedesktop.org/git/mesa/drm into nouveau-1
Diffstat (limited to 'linux-core/drm_lock.c')
-rw-r--r-- | linux-core/drm_lock.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/linux-core/drm_lock.c b/linux-core/drm_lock.c index 7aa00bc2..d1b85a15 100644 --- a/linux-core/drm_lock.c +++ b/linux-core/drm_lock.c @@ -152,6 +152,7 @@ int drm_unlock(struct inode *inode, struct file *filp, drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->head->dev; drm_lock_t lock; + unsigned long irqflags; if (copy_from_user(&lock, (drm_lock_t __user *) arg, sizeof(lock))) return -EFAULT; @@ -162,6 +163,16 @@ int drm_unlock(struct inode *inode, struct file *filp, return -EINVAL; } + spin_lock_irqsave(&dev->tasklet_lock, irqflags); + + if (dev->locked_tasklet_func) { + dev->locked_tasklet_func(dev); + + dev->locked_tasklet_func = NULL; + } + + spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); + atomic_inc(&dev->counts[_DRM_STAT_UNLOCKS]); /* kernel_context_switch isn't used by any of the x86 drm |