--- ./src/uxa/intel_batchbuffer.c.orig 2013-07-28 15:53:23.000000000 +0200 +++ ./src/uxa/intel_batchbuffer.c 2013-09-10 12:47:45.563838120 +0200 @@ -219,6 +219,8 @@ intel_batch_do_flush(scrn); } +#include + void intel_batch_submit(ScrnInfoPtr scrn) { intel_screen_private *intel = intel_get_screen_private(scrn); @@ -251,13 +253,21 @@ } ret = dri_bo_subdata(intel->batch_bo, 0, intel->batch_used*4, intel->batch_ptr); + int tries = 200; if (ret == 0) { + retry: ret = drm_intel_bo_mrb_exec(intel->batch_bo, intel->batch_used*4, NULL, 0, 0xffffffff, (HAS_BLT(intel) ? intel->current_batch: I915_EXEC_DEFAULT)); + if (ret && tries) { + xf86DrvMsg(scrn->scrnIndex, X_WARNING, "retrying batchbuffer submit\n"); + --tries; + usleep(50 * 1000); + goto retry; + } } if (ret != 0) {