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