diff options
author | Eric Anholt <eric@anholt.net> | 2006-12-11 10:50:25 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2006-12-11 10:50:25 -0800 |
commit | d214138910218a24e8ae427d5ec6ff886dcb98a8 (patch) | |
tree | c9e47cd2b3a0f30308c669c1fe1cef2e2ae6c2f5 /src/mesa/drivers/dri/i965/intel_ioctl.c | |
parent | 89433fef0dc9b7494904f99dd343042ddbbc3d80 (diff) | |
parent | 26626c0052cd5442f609659aa9ed25ac78e65b55 (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.c | 5 |
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 ) { |