diff options
author | Thomas Hellstrom <thomas-at-tungstengraphics-dot-com> | 2006-10-02 13:34:30 +0200 |
---|---|---|
committer | Thomas Hellstrom <thomas-at-tungstengraphics-dot-com> | 2006-10-02 13:34:30 +0200 |
commit | c6be27401fbc12ec72bac13d07e3cc93bd63732a (patch) | |
tree | aeb57729c3005fb3e214cf91743e88e0a2879230 /linux-core/drm_lock.c | |
parent | 58a23d193f7d25d23c76a58c192c814a415a843b (diff) |
Trap and be verbose about a deadlock that occurs with AIGLX and drivers that
use drm_reclaim_buffers_locked().
Diffstat (limited to 'linux-core/drm_lock.c')
-rw-r--r-- | linux-core/drm_lock.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/linux-core/drm_lock.c b/linux-core/drm_lock.c index 04c145a6..0cf183a7 100644 --- a/linux-core/drm_lock.c +++ b/linux-core/drm_lock.c @@ -343,6 +343,7 @@ int drm_kernel_take_hw_lock(struct file *filp) DRM_DEVICE; int ret = 0; + unsigned long _end = jiffies + 3*DRM_HZ; if (!drm_i_have_hw_lock(filp)) { @@ -364,7 +365,12 @@ int drm_kernel_take_hw_lock(struct file *filp) break; /* Got lock */ } /* Contention */ - schedule(); + if (time_after_eq(jiffies,_end)) { + ret = -EBUSY; + break; + } + + schedule_timeout(1); if (signal_pending(current)) { ret = -ERESTARTSYS; break; |