--- linux-2.6.4/drivers/char/drm/r128_cce.c~ 2004-03-10 18:55:22.000000000 -0800 +++ linux-2.6.4/drivers/char/drm/r128_cce.c 2004-03-23 11:31:46.627532264 -0800 @@ -124,6 +124,7 @@ if ( !(R128_READ( R128_PC_NGUI_CTLSTAT ) & R128_PC_BUSY) ) { return 0; } + cond_resched(); DRM_UDELAY( 1 ); } @@ -140,6 +141,7 @@ for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { int slots = R128_READ( R128_GUI_STAT ) & R128_GUI_FIFOCNT_MASK; if ( slots >= entries ) return 0; + cond_resched(); DRM_UDELAY( 1 ); } @@ -161,6 +163,7 @@ r128_do_pixcache_flush( dev_priv ); return 0; } + cond_resched(); DRM_UDELAY( 1 ); } @@ -221,6 +224,7 @@ return r128_do_pixcache_flush( dev_priv ); } } + cond_resched(); DRM_UDELAY( 1 ); } @@ -871,6 +875,7 @@ return buf; } } + cond_resched(); DRM_UDELAY( 1 ); } @@ -904,6 +909,7 @@ r128_update_ring_snapshot( ring ); if ( ring->space >= n ) return 0; + cond_resched(); DRM_UDELAY( 1 ); }