--- linux-2.6.4/drivers/char/drm/radeon_cp.c~ 2004-03-10 18:55:23.000000000 -0800 +++ linux-2.6.4/drivers/char/drm/radeon_cp.c 2004-03-22 18:28:05.544607016 -0800 @@ -608,6 +608,7 @@ for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { if ( !(RADEON_READ( RADEON_RB2D_DSTCACHE_CTLSTAT ) & RADEON_RB2D_DC_BUSY) ) { + cond_resched(); return 0; } DRM_UDELAY( 1 ); @@ -631,6 +632,7 @@ int slots = ( RADEON_READ( RADEON_RBBM_STATUS ) & RADEON_RBBM_FIFOCNT_MASK ); if ( slots >= entries ) return 0; + cond_resched(); DRM_UDELAY( 1 ); } @@ -656,6 +658,7 @@ radeon_do_pixcache_flush( dev_priv ); return 0; } + cond_resched(); DRM_UDELAY( 1 ); } @@ -1586,6 +1589,7 @@ } if (t) { + cond_resched(); DRM_UDELAY( 1 ); dev_priv->stats.freelist_loops++; } @@ -1669,6 +1673,7 @@ i = 0; last_head = head; + cond_resched(); DRM_UDELAY( 1 ); }