diff options
author | Dave Airlie <airlied@linux.ie> | 2007-04-26 15:56:21 +1000 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2007-04-26 15:56:21 +1000 |
commit | b589b846e73bfe6235cd702bb8ae89701c85eaab (patch) | |
tree | c54ddc23cfba3b5d9fafb86477d20fde4c36a52a /linux-core/drm_fence.c | |
parent | 34be91fe4e9f0ad73b7c4354aea0c8ce10f45f68 (diff) | |
parent | 5c8561aae22138880673503d930af7f1b361d071 (diff) |
Merge branch 'origin' into modesetting-101
Diffstat (limited to 'linux-core/drm_fence.c')
-rw-r--r-- | linux-core/drm_fence.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/linux-core/drm_fence.c b/linux-core/drm_fence.c index 6be6f218..088c50d6 100644 --- a/linux-core/drm_fence.c +++ b/linux-core/drm_fence.c @@ -295,17 +295,21 @@ static int drm_fence_lazy_wait(drm_device_t *dev, { drm_fence_manager_t *fm = &dev->fm; drm_fence_class_manager_t *fc = &fm->class[fence->class]; - + int signaled; unsigned long _end = jiffies + 3*DRM_HZ; int ret = 0; do { DRM_WAIT_ON(ret, fc->fence_queue, 3 * DRM_HZ, - fence_signaled(dev, fence, mask, 1)); + (signaled = fence_signaled(dev, fence, mask, 1))); + if (signaled) + return 0; if (time_after_eq(jiffies, _end)) break; } while (ret == -EINTR && ignore_signals); - if (time_after_eq(jiffies, _end) && (ret != 0)) + if (fence_signaled(dev, fence, mask, 0)) + return 0; + if (time_after_eq(jiffies, _end)) ret = -EBUSY; if (ret) { if (ret == -EBUSY) { |