Bugzilla – Bug 151644
Reading Video BIOS using xf86ReadPciBIOS results in system hang - ATI Radeon 7000
Last modified: 2006-03-28 15:59:31 UTC
Dell has discovered a condition that will cause a system hang with Red Hat Enterprise Linux. The symptom is an IERR on the PCI bus. More details: https://bugs.freedesktop.org/show_bug.cgi?id=4139 ATI has produced a workaround for this xf86 problem by forcing the driver to access the device directly. This is by no means ideal but it is mentioned here because it is a viable workaround for servers where more than one graphics device will never be present. The patch is available for RHEL 4 and will be attached shortly.
Created attachment 68925 [details] XOrg patch used for RHEL4
Created attachment 68926 [details] XFree86 patch for RHEL3
Please test my patch in https://bugs.freedesktop.org/show_bug.cgi?id=4139 I should be able to test it myself also. I believe it is a better mid-term solution than the RH quick hack as this can pop up in other drivers also.
According to previous comment by Egbert.
Dell is reporting a Sev 1 problem for SLES10 which has similarities to this one (IERR on reboot). Would you be able to provide RPMs or other files with Egbert's patch for testing. They are also reporting an IERR when "test this setting" was run. Would that call xf86ReadPciBIOS?
Fatal warning (for autobuild): xf86pciBus.c: In function 'getPciVideoPtr': xf86pciBus.c:1612: warning: control reaches end of non-void function [...] pciVideoPtr getPciVideoPtr(tag) { int n = 0; pciVideoPtr pvp = NULL; if (!xf86PciVideoInfo) return 0; while ((pvp = xf86PciVideoInfo[n++])) { if (pciTag(pvp->bus,pvp->device,pvp->func) == tag) return pvp; } if (!pvp) return 0; } Egbert, what's the correct fix? Always return 0, i.e. --- if (!pvp) return 0; +++ return 0; since this is checked later by the functions, which call getPciVideoPtr?
Yeah, this would be the correct fix.
Thanks for checking!
Created attachment 70926 [details] xorg-x11-server-6.9.0-21.i586.rpm
Created attachment 70927 [details] xorg-x11-server-6.9.0-21.x86_64.rpm
The RPMs in my previous comments right above include Egbert's patch. Rod, could you give it a try? Thanks. Looking at Egbert's comment ("One may try something like this. Please note: this is entirely untested.") and the size of the patch itself I'm not really happy about still including this patch for CODE10. IMHO testing on different platforms, i.e. i386, x86_64 and ia64 (at least) would be required. It might be an option to include only the patch in comment #1 for CODE10. Egbert, could you check this patch as well (if you didn't yet)? Thanks.
I'm testing my fix right now.
--- if (!pvp) return 0; +++ return 0; This should actually be return NULL; on the other hand in Pci.c in: + if (!(emptybase = getEmptyPciRange(Tag,b_reg))) { + xf86Msg(X_ERROR,"Cannot find empty range to map base to\n"); + return NULL; + } return NULL; should be return 0; Sorry.
Created attachment 71067 [details] additional fix I've tested my patch and I verified that it works. I came across some other not totally unrelated problems which are addressed by this additional patch.
Thanks, Egbert. I'll provide RPMs, which will include the changes of comments #15+16, for testing later. Egbert, on which platforms did you make your tests?
Created attachment 71094 [details] xorg-x11-server-6.9.0-21.i586.rpm
Created attachment 71095 [details] xorg-x11-server-6.9.0-21.x86_64.rpm
Rod, could you give it a try? Thanks.
Rod, any update from your side on this one?
I'll discuss with Dell to see if they can test the rpm. For the short-term we are including the patch from comment #1 as part of the custom rpm ATI will provide to Dell. Hopefully this can be replaced with Egbert's patch eventually.
Yeah, I will prepare the patch for commit as there seems to be a consensus on this.
Egbert, do you plan to have this in CODE10 Beta 9 (this Thursday), or do you still need input from ATI at this point?
Patch applied. Fixed with 10.1 > RC1, i.e. SLES/SLED Beta10.