OSDN Git Service

[FreeBSD] This check isn't correct and causes at least mga to lockup.
authorRobert Noland <rnoland@2hip.net>
Thu, 23 Oct 2008 19:42:49 +0000 (15:42 -0400)
committerRobert Noland <rnoland@2hip.net>
Thu, 23 Oct 2008 19:42:49 +0000 (15:42 -0400)
bsd-core/drm_lock.c

index 685b0ea..dec7281 100644 (file)
@@ -102,17 +102,15 @@ int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
        struct drm_lock *lock = data;
 
+       DRM_DEBUG("%d (pid %d) requests unlock (0x%08x), flags = 0x%08x\n",
+           lock->context, DRM_CURRENTPID, dev->lock.hw_lock->lock,
+           lock->flags);
+
        if (lock->context == DRM_KERNEL_CONTEXT) {
                DRM_ERROR("Process %d using kernel context %d\n",
                    DRM_CURRENTPID, lock->context);
                return EINVAL;
        }
-       /* Check that the context unlock being requested actually matches
-        * who currently holds the lock.
-        */
-       if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) ||
-           _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock) != lock->context)
-               return EINVAL;
 
        DRM_SPINLOCK(&dev->tsk_lock);
        if (dev->locked_task_call != NULL) {