Package: xserver-xfree86 Version: 4.3.0-7 The code in xc/programs/Xserver/xfree86/hw/xfree86/os-support/bus/linuxPci.c doesn't handle PCI Domains, so the X server fails to find the entry for the video card under /proc.
This problem manifests itself with kernel 2.6.x. Here's a simple patch to fix it, it first tries the old-style /proc/bus/pci access, then tries to access it with the PCI Domain information as well. I've only tested this on an Ultra 5 workstation with the testing distro. ---- begin patch ---- --- xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c.orig 2004-04-30 22:07:52.572277727 -0700 +++ xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c 2004-04-30 22:13:59.599136716 -0700 @@ -101,23 +101,34 @@ static int linuxPciOpenFile(PCITAG tag) { - static int lbus,ldev,lfunc,fd = -1; - int bus, dev, func; - char file[32]; + static int lbus,ldev,ldom,lfunc,fd = -1; + int bus, dev, dom, func; + char file[32], file2[32]; bus = PCI_BUS_FROM_TAG(tag); dev = PCI_DEV_FROM_TAG(tag); + dev = PCI_DOM_FROM_TAG(tag); func = PCI_FUNC_FROM_TAG(tag); - if (fd == -1 || bus != lbus || dev != ldev || func != lfunc) { + if (fd == -1 || bus != lbus || dev != ldev || dom != ldom || + func != lfunc) { if (fd != -1) close(fd); - if (bus < 256) + if (bus < 256) { sprintf(file, "/proc/bus/pci/%02x/%02x.%1x", bus, dev, func); - else + sprintf(file2, "/proc/bus/pci/%04x:%02x/%02x.%1x", + dom, bus, dom, dev, func); + } else { sprintf(file, "/proc/bus/pci/%04x/%02x.%1x", bus, dev, func); + sprintf(file2, "/proc/bus/pci/%04x:%04x/%02x.%1x", + dom, bus, dev, func); + } fd = open(file,O_RDWR); + if(fd == -1) { + fd = open(file2,O_RDWR); + ldom = dom; + } lbus = bus; ldev = dev; lfunc = func; ---- end patch ---- -- DN Daniel