Author: cognet
Date: Wed Feb 29 12:44:34 2012
New Revision: 232295
URL: http://svn.freebsd.org/changeset/base/232295

Log:
  Make sure we do not provide the page 0 to the VM. It can't handle it properly,
  because pmap_extract() returns 0 when there's no mapping.
  
  PR:           arm/154227
  MFC after:    1 week

Modified:
  head/sys/arm/mv/mv_machdep.c
  head/sys/arm/xscale/i8134x/crb_machdep.c

Modified: head/sys/arm/mv/mv_machdep.c
==============================================================================
--- head/sys/arm/mv/mv_machdep.c        Wed Feb 29 12:13:05 2012        
(r232294)
+++ head/sys/arm/mv/mv_machdep.c        Wed Feb 29 12:44:34 2012        
(r232295)
@@ -287,9 +287,19 @@ physmap_init(void)
                    availmem_regions[i].mr_start + availmem_regions[i].mr_size,
                    availmem_regions[i].mr_size);
 
-               phys_avail[j] = availmem_regions[i].mr_start;
-               phys_avail[j + 1] = availmem_regions[i].mr_start +
-                   availmem_regions[i].mr_size;
+               /* 
+                * We should not map the page at PA 0x0000000, the VM can't
+                * handle it, as pmap_extract() == 0 means failure.
+                */
+               if (availmem_regions[i].mr_start > 0 ||
+                   availmem_regions[i].mr_size > PAGE_SIZE) {
+                       phys_avail[j] = availmem_regions[i].mr_start;
+                       if (phys_avail[j] == 0)
+                               phys_avail[j] += PAGE_SIZE;
+                       phys_avail[j + 1] = availmem_regions[i].mr_start +
+                           availmem_regions[i].mr_size;
+               } else
+                       j -= 2;
        }
        phys_avail[j] = 0;
        phys_avail[j + 1] = 0;

Modified: head/sys/arm/xscale/i8134x/crb_machdep.c
==============================================================================
--- head/sys/arm/xscale/i8134x/crb_machdep.c    Wed Feb 29 12:13:05 2012        
(r232294)
+++ head/sys/arm/xscale/i8134x/crb_machdep.c    Wed Feb 29 12:44:34 2012        
(r232295)
@@ -381,8 +381,8 @@ initarm(void *arg, void *arg2)
        
        i = 0;
 #ifdef ARM_USE_SMALL_ALLOC
-       phys_avail[i++] = 0x00000000;
-       phys_avail[i++] = 0x00001000;   /*
+       phys_avail[i++] = 0x00001000;
+       phys_avail[i++] = 0x00002000;   /*
                                         *XXX: Gross hack to get our
                                         * pages in the vm_page_array
                                         . */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to