|
|
115cc5d |
--- ./hw/xfree86/os-support/bus/linuxPci.c.orig 2007-03-14 09:37:44.000000000 -0600
|
|
|
115cc5d |
+++ ./hw/xfree86/os-support/bus/linuxPci.c 2007-03-14 09:41:01.000000000 -0600
|
|
|
115cc5d |
@@ -634,28 +634,28 @@
|
|
|
115cc5d |
ADDRESS Base, unsigned long Size)
|
|
|
115cc5d |
{
|
|
|
115cc5d |
int domain = xf86GetPciDomain(Tag);
|
|
|
115cc5d |
- int fd;
|
|
|
115cc5d |
+ int fd = -1;
|
|
|
115cc5d |
pointer addr;
|
|
|
115cc5d |
|
|
|
115cc5d |
/*
|
|
|
115cc5d |
* We use /proc/bus/pci on non-legacy addresses or if the Linux sysfs
|
|
|
115cc5d |
* legacy_mem interface is unavailable.
|
|
|
115cc5d |
*/
|
|
|
115cc5d |
- if (Base > 1024*1024)
|
|
|
115cc5d |
- return linuxMapPci(ScreenNum, Flags, Tag, Base, Size,
|
|
|
115cc5d |
+ if (Base >= 1024*1024)
|
|
|
115cc5d |
+ addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size,
|
|
|
115cc5d |
PCIIOC_MMAP_IS_MEM);
|
|
|
115cc5d |
-
|
|
|
115cc5d |
- if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0)
|
|
|
115cc5d |
- return linuxMapPci(ScreenNum, Flags, Tag, Base, Size,
|
|
|
115cc5d |
+ else if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0)
|
|
|
115cc5d |
+ addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size,
|
|
|
115cc5d |
PCIIOC_MMAP_IS_MEM);
|
|
|
115cc5d |
+ else
|
|
|
115cc5d |
+ addr = mmap(NULL, Size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, Base);
|
|
|
115cc5d |
|
|
|
115cc5d |
- addr = mmap(NULL, Size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, Base);
|
|
|
115cc5d |
- if (addr == MAP_FAILED) {
|
|
|
115cc5d |
- close (fd);
|
|
|
115cc5d |
+ if (fd >= 0)
|
|
|
115cc5d |
+ close(fd);
|
|
|
115cc5d |
+ if (addr == NULL || addr == MAP_FAILED) {
|
|
|
115cc5d |
perror("mmap failure");
|
|
|
115cc5d |
FatalError("xf86MapDomainMem(): mmap() failure\n");
|
|
|
115cc5d |
}
|
|
|
115cc5d |
- close(fd);
|
|
|
115cc5d |
return addr;
|
|
|
115cc5d |
}
|
|
|
115cc5d |
|