From 234bd22bcfd8754b71cb53dedd3dffcb8a52d1ba Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Fri, 3 May 2002 20:51:04 +0000 Subject: [PATCH] back out changes --- linux/radeon_cp.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/linux/radeon_cp.c b/linux/radeon_cp.c index da6c21de..2f262516 100644 --- a/linux/radeon_cp.c +++ b/linux/radeon_cp.c @@ -1220,28 +1220,30 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev ) drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_buf_priv_t *buf_priv; drm_buf_t *buf; - int i; + int i, t; int start; - u32 done_age = RADEON_READ( RADEON_LAST_DISPATCH_REG ); if ( ++dev_priv->last_buf >= dma->buf_count ) dev_priv->last_buf = 0; start = dev_priv->last_buf; - for ( i = start ; i < dma->buf_count ; i++ ) { - buf = dma->buflist[i]; - buf_priv = buf->dev_private; - if ( buf->pid == 0 || (buf->pending && - buf_priv->age <= done_age) ) { - buf->pending = 0; - return buf; + for ( t = 0 ; t < dev_priv->usec_timeout ; t++ ) { + u32 done_age = RADEON_READ( RADEON_LAST_DISPATCH_REG ); + for ( i = start ; i < dma->buf_count ; i++ ) { + buf = dma->buflist[i]; + buf_priv = buf->dev_private; + if ( buf->pid == 0 || (buf->pending && + buf_priv->age <= done_age) ) { + buf->pending = 0; + return buf; + } + start = 0; } - start = 0; + udelay( 1 ); } - /* It's not really an error for this to fail. - */ + DRM_ERROR( "returning NULL!\n" ); return NULL; }