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