2009-01-21 21:13:38

by Hugh Dickins

[permalink] [raw]
Subject: 2.6.29-rc powerpc G5 Xorg legacy_mem regression

I've a PowerMac G5 here on which the openSUSE 11.1 Xorg dislikes your
d3a54014e2a94bd37b7dee5e76e03f7bc4fab49a PCI: Add legacy_io/mem to all busses

startx fails with xf86MapDomainMem(): mmap() failure,
the relevant lines from an strace being:
open("/sys/class/pci_bus/0000:0a/legacy_mem", O_RDWR) = 6
mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_SHARED, 6, 0xa0000) =
-1 ENXIO (No such device or address)
Whereas if I back out your pci_create_legacy_files(),
it'll happily mmap /dev/mem instead and work with that.

The ENXIO comes from arch/powerpc/kernel/pci-common.c:
pci_mmap_legacy_page_range() finds hose->isa_mem_size 0.

That's as far as I took it: I can see there's code to set up
"Legacy VGA memory" but it looks like that's not coming into play.
dmesg and .config attached: I think you'll get to the point much
quicker than I would.

Though I bet you're busy at the moment: no hurry, I can comment
out the pci_create_legacy_files() from drivers/pci/bus.c for now.

Hugh


Attachments:
dmesg.thorn (30.50 kB)
dmesg of PowerMac G5
config.thorn (40.05 kB)
.config of PowerMac G5
Download all attachments

2009-01-22 05:16:36

by Benjamin Herrenschmidt

[permalink] [raw]
Subject: Re: 2.6.29-rc powerpc G5 Xorg legacy_mem regression


> That's as far as I took it: I can see there's code to set up
> "Legacy VGA memory" but it looks like that's not coming into play.
> dmesg and .config attached: I think you'll get to the point much
> quicker than I would.
>
> Though I bet you're busy at the moment: no hurry, I can comment
> out the pci_create_legacy_files() from drivers/pci/bus.c for now.

It's actually an X bug :-(

IE, I always create the legacy files, I just make mmap fail when legacy
VGA isn't available. This is the right way to do it, as it properly
informs X that yes, I do support the new API and no, there's no point in
trying to access legacy VGA memory on this machine.

I honestly don't see how I can fix that without making proper support
for legacy memory / IO impossible, and thus guaranteeing that X will
eternally continue to crap on random bits of /dev/mem in the future :-(

Cheers,
Ben.