From: Roland S. <sr...@st...> - 2001-12-20 18:51:30
|
Here's a patch which fixes the lockups with the radeon in some apps (I've only experienced it in return to castle wolfenstein, and the patch works here for me, don't know if it fixes the lockups of some screensavers some people had). in linux/drivers/char/drm/radeon_state.c (if you don't use a new kernel and use the drm module from the XFree tree, you have to edit it there) around line 1060 (in function static int radeon_cp_dispatch_texture) change } else if ( size < 4 ) { to } else if ( size < 4 && size > 0 ) { (sorry, no diff, since I don't have the original file here, and I've changed some other stuff (for debugging purposes)). Of course you need to recompile your modules (or your kernel in case you don't build the radeon drm driver as a module), leave X, rmmod radeon to make it work. Explanation of the fix (at least that's what I think why it locked up): If radeon_dispatch_texture is called and image->width is 0 (not sure if this is supposed to happen, but it indeed does happen), then the size will be incorrectly adjusted to 1. This causes the command processor to lock up -> the driver doesn't notice this, and since no more buffers get marked as completed, in the end you will get those "radeon_freelist_get" error messages when all buffers are filled. Hope this helps (I hope it really does, given the time I invested to find it out...) If it doesn't, well there are other errors in the radeon drm driver (for instance, there's a non-functional radeon_wait_ring function), try to fix these ;-)). Roland |