Here's the result from my testing: - current git + this patch : - CPU usage back to normal when playing regular 640x480 mpeg2 xvideo in mythtv (say 5% Xorg CPU usage) - zooming in on the recording in mythtv still results in a runaway Xorg process (100% CPU - even kill -9 did not work (neat)) Since I never ran the zoom test for you in mythtv with the previous debug patch, I figured I'd give it a shot: (normal video) wait_vline_range: start 0 stop 1079 wait_vline_range: start 0 stop 1079 wait_vline_range: start 0 stop 1079 wait_vline_range: start 0 stop 1079 (zoom in) wait_vline_range: start -90 stop 1169 (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! (WW) RADEONHD(0): DRMCPIdle: DRM CP IDLE returned BUSY! Seems like dmesg logs are getting flooded too: [ 465.356686] [drm] wait idle failed status : 0xA0003030 0x00000003 [ 465.460908] [drm] wait idle failed status : 0xA0003030 0x00000003 [ 465.565086] [drm] wait idle failed status : 0xA0003030 0x00000003 [ 465.669180] [drm] wait idle failed status : 0xA0003030 0x00000003 Just in case I've applied your patch incorrectly, this is what my wait_vline_range function looks like: void wait_vline_range(ScrnInfoPtr pScrn, drmBufPtr ib, int crtc, int start, int stop) { RHDPtr rhdPtr = RHDPTR(pScrn); ErrorF("wait_vline_range: start %d stop %d\n", start, stop); if ((crtc < 0) || (crtc > 1)) return; if(!rhdPtr->Crtc[crtc]->Active) return; start = max(start, 0); stop = min(stop, rhdPtr->Crtc[crtc]->Height); if (stop <= start) return; /* set the VLINE range */ if(crtc == 0) ereg(ib, D1MODE_VLINE_START_END, start | (stop << 16)); else ereg(ib, D2MODE_VLINE_START_END, start | (stop << 16)); /* tell the CP to poll the VLINE state register */ pack3 (ib, IT_WAIT_REG_MEM, 6); e32 (ib, WAIT_REG | WAIT_EQ); if(crtc == 0) e32 (ib, D1MODE_VLINE_STATUS >> 2); else e32 (ib, D2MODE_VLINE_STATUS >> 2); e32 (ib, 0); e32 (ib, 0); // Ref value e32 (ib, 0x1000); // Mask e32 (ib, 10); // Wait interval } regards, jp On Friday 20 February 2009 12:16:46 Christian König wrote:
Hi,
attached is a patch that should fix the problem with the runaway process. Please do a git reset before applying this patch.
Thanks for testing, Christian.
-- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org