summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/i965/intel_ioctl.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2006-12-11 10:50:25 -0800
committerEric Anholt <eric@anholt.net>2006-12-11 10:50:25 -0800
commitd214138910218a24e8ae427d5ec6ff886dcb98a8 (patch)
treec9e47cd2b3a0f30308c669c1fe1cef2e2ae6c2f5 /src/mesa/drivers/dri/i965/intel_ioctl.c
parent89433fef0dc9b7494904f99dd343042ddbbc3d80 (diff)
parent26626c0052cd5442f609659aa9ed25ac78e65b55 (diff)
Merge branch 'origin' into crestline
Diffstat (limited to 'src/mesa/drivers/dri/i965/intel_ioctl.c')
-rw-r--r--src/mesa/drivers/dri/i965/intel_ioctl.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_ioctl.c b/src/mesa/drivers/dri/i965/intel_ioctl.c
index d8176c559e..4da31277ea 100644
--- a/src/mesa/drivers/dri/i965/intel_ioctl.c
+++ b/src/mesa/drivers/dri/i965/intel_ioctl.c
@@ -95,7 +95,7 @@ void intelWaitIrq( struct intel_context *intel, int seq )
{
if (!intel->no_hw) {
drmI830IrqWait iw;
- int ret;
+ int ret, lastdispatch;
if (0)
fprintf(stderr, "%s %d\n", __FUNCTION__, seq );
@@ -103,11 +103,12 @@ void intelWaitIrq( struct intel_context *intel, int seq )
iw.irq_seq = seq;
do {
+ lastdispatch = intel->sarea->last_dispatch;
ret = drmCommandWrite( intel->driFd, DRM_I830_IRQ_WAIT, &iw, sizeof(iw) );
/* This seems quite often to return before it should!?!
*/
- } while (ret == -EAGAIN || ret == -EINTR || (ret == 0 && seq > intel->sarea->last_dispatch));
+ } while (ret == -EAGAIN || ret == -EINTR || (ret == -EBUSY && lastdispatch != intel->sarea->last_dispatch) || (ret == 0 && seq > intel->sarea->last_dispatch));
if ( ret ) {