diff options
author | Thomas Hellstrom <thellstrom@vmware.com> | 2009-03-02 05:10:55 -0500 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2009-03-02 18:49:54 -0500 |
commit | 171901d15deeef61aa8e1b0d0772404f39691b73 (patch) | |
tree | 7b455223711f255c70ecc8ed43b2a64acdf3547d | |
parent | 4d77c88e912e5eb9480432af09e950ca8995c253 (diff) |
drm: Wake up all lock waiters when the master disappears.
Currently only one waiter is woken up, leaving other waiters
hanging waiting for the DRM lock.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@linux.ie>
-rw-r--r-- | drivers/gpu/drm/drm_bufs.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_stub.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c index 72c667f9bee1..12715d3c078d 100644 --- a/drivers/gpu/drm/drm_bufs.c +++ b/drivers/gpu/drm/drm_bufs.c | |||
@@ -420,7 +420,7 @@ int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map) | |||
420 | dev->sigdata.lock = NULL; | 420 | dev->sigdata.lock = NULL; |
421 | master->lock.hw_lock = NULL; /* SHM removed */ | 421 | master->lock.hw_lock = NULL; /* SHM removed */ |
422 | master->lock.file_priv = NULL; | 422 | master->lock.file_priv = NULL; |
423 | wake_up_interruptible(&master->lock.lock_queue); | 423 | wake_up_interruptible_all(&master->lock.lock_queue); |
424 | } | 424 | } |
425 | break; | 425 | break; |
426 | case _DRM_AGP: | 426 | case _DRM_AGP: |
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 46bb923b097c..7b251dd70811 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c | |||
@@ -151,7 +151,7 @@ static void drm_master_destroy(struct kref *kref) | |||
151 | dev->sigdata.lock = NULL; | 151 | dev->sigdata.lock = NULL; |
152 | master->lock.hw_lock = NULL; | 152 | master->lock.hw_lock = NULL; |
153 | master->lock.file_priv = NULL; | 153 | master->lock.file_priv = NULL; |
154 | wake_up_interruptible(&master->lock.lock_queue); | 154 | wake_up_interruptible_all(&master->lock.lock_queue); |
155 | } | 155 | } |
156 | 156 | ||
157 | drm_free(master, sizeof(*master), DRM_MEM_DRIVER); | 157 | drm_free(master, sizeof(*master), DRM_MEM_DRIVER); |