xf86-video-intel: Branch 'intel-kernelmode' - 2 commits - src/intel_batchbuffer.c

Kristian Høgsberg krh at kemper.freedesktop.org
Wed Apr 2 19:25:57 PDT 2008


 src/intel_batchbuffer.c |   20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

New commits:
commit c9676d0aed04ddfa86d8a9732cc4bb1ff50f2966
Merge: 58956ca... 5533826...
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Wed Apr 2 22:16:45 2008 -0400

    Merge commit 'origin/intel-batchbuffer' into ms

commit 55338268bbdbb8c4fbb030adb803e258764e6860
Author: Kristian Høgsberg <krh at jiraiya.boston.redhat.com>
Date:   Wed Apr 2 22:02:18 2008 -0400

    Handle EAGAIN when submitting exec buffers.
    
    Cherry picked from 32879e14610906c23b3ca874ba7234370132d76c in mesa.

diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c
index 3362a46..be13ac6 100644
--- a/src/intel_batchbuffer.c
+++ b/src/intel_batchbuffer.c
@@ -133,6 +133,7 @@ intel_exec_ioctl(ScrnInfoPtr pScrn,
    I830Ptr pI830 = I830PTR(pScrn);
    struct drm_i915_execbuffer execbuf;
    dri_fence *fo;
+   int ret;
 
    assert(used);
 
@@ -151,12 +152,25 @@ intel_exec_ioctl(ScrnInfoPtr pScrn,
    execbuf.ops_list = (unsigned long)start;
    execbuf.fence_arg.flags = DRM_FENCE_FLAG_SHAREABLE | DRM_I915_FENCE_FLAG_FLUSHED;
 
-   if (drmCommandWriteRead(pI830->drmSubFD, DRM_I915_EXECBUFFER, &execbuf,
-                       sizeof(execbuf))) {
-      fprintf(stderr, "DRM_I830_EXECBUFFER: %d\n", -errno);
+   do {
+      ret = drmCommandWriteRead(pI830->drmSubFD, DRM_I915_EXECBUFFER, &execbuf,
+				sizeof(execbuf));
+   } while (ret == -EAGAIN);
+
+   if (ret) {
+      fprintf(stderr, "DRM_I915_EXECBUFFER: %d\n", -errno);
       exit(1);
    }
 
+   if (execbuf.fence_arg.error != 0) {
+      /*
+       * Fence creation has failed, but the GPU has been idled by the
+       * kernel. Safe to continue.
+       */
+      *fence = NULL;
+      return;
+   }
+
    fo = intel_ttm_fence_create_from_arg(pI830->bufmgr, "fence buffers",
                                         &execbuf.fence_arg);
    if (!fo) {


More information about the xorg-commit mailing list