Dear list,

On Tue, Jul 16, 2002 at 11:02:05PM +0200, Charl P. Botha wrote:
> This is just to add another sample to the Radeon switch to VT and back X
> freeze bug, which is apparently known.

Michel Dänzer and I spent some more time on this bug today.  After having
mucked around with some of the AGP settings (with no success), I did a pre-
and post-crash "lspci -vvv".  The video card was leaving bus mastering mode
when X switched to the console!  It seems this is the root of the VT
switching bug, at least on my system.  At least this specific condition is
easy to test for on the systems of users that experience this crash.

So, appended is a patch that changes the RADEONEnterVT code in
radeon_driver.c so that it re-enables bus mastering mode.  Michel has tested
it on his TiBook (which doesn't have the problem) and the patch doesn't seem
to break anything.

Please apply to the DRI trunk and XFree86 CVS if you think this is
applicable.  If you can keep my name in the source, I'll be even happer.
Yes, small things amuse small minds. ;)

Thanks,
Charl

-- 
charl p. botha http://cpbotha.net/ http://visualisation.tudelft.nl/
Index: radeon_driver.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c,v
retrieving revision 1.22
diff -u -r1.22 radeon_driver.c
--- radeon_driver.c     12 Jun 2002 15:50:28 -0000      1.22
+++ radeon_driver.c     23 Jul 2002 16:55:16 -0000
@@ -4435,6 +4435,14 @@
 
     RADEONTRACE(("RADEONEnterVT\n"));
 
+    /* This seems to fix that !@#$ irritating switch to VT and back X-freeze
+     * that has been plaguing some DRI users.  It seems that bus mastering
+     * is turned off on the video card when one switches to a VT and this
+     * needs to be reactivated when we get back, else things just stop. :)
+     * Charl P. Botha <http://cpbotha.net/>, 
+     * Michel Daenzer <[EMAIL PROTECTED]> */
+    xf86EnablePciBusMaster(info->PciInfo, TRUE);
+
     if (info->FBDev) {
        unsigned char *RADEONMMIO = info->MMIO;
         if (!fbdevHWEnterVT(scrnIndex,flags)) return FALSE;

Reply via email to