Author: nyan
Date: Tue Dec  8 13:06:35 2009
New Revision: 200255
URL: http://svn.freebsd.org/changeset/base/200255

Log:
  MFi386: revision 200219
  
    Improve the algorithm the loader uses to choose a memory range for its
    heap when using a range above 1MB.
  
  MFC after:    1 week

Modified:
  head/sys/boot/pc98/libpc98/biosmem.c
  head/sys/boot/pc98/loader/main.c

Modified: head/sys/boot/pc98/libpc98/biosmem.c
==============================================================================
--- head/sys/boot/pc98/libpc98/biosmem.c        Tue Dec  8 13:04:26 2009        
(r200254)
+++ head/sys/boot/pc98/libpc98/biosmem.c        Tue Dec  8 13:06:35 2009        
(r200255)
@@ -34,8 +34,13 @@ __FBSDID("$FreeBSD$");
 #include "libi386.h"
 #include "btxv86.h"
 
-vm_offset_t    memtop, memtop_copyin;
-uint32_t       bios_basemem, bios_extmem;
+vm_offset_t    memtop, memtop_copyin, high_heap_base;
+uint32_t       bios_basemem, bios_extmem, high_heap_size;
+
+/*
+ * The minimum amount of memory to reserve in bios_extmem for the heap.
+ */
+#define        HEAP_MIN        (3 * 1024 * 1024)
 
 void
 bios_getmem(void)
@@ -48,4 +53,12 @@ bios_getmem(void)
     /* Set memtop to actual top of memory */
     memtop = memtop_copyin = 0x100000 + bios_extmem;
 
+    /*
+     * If we have extended memory, use the last 3MB of 'extended' memory
+     * as a high heap candidate.
+     */
+    if (bios_extmem >= HEAP_MIN) {
+       high_heap_size = HEAP_MIN;
+       high_heap_base = memtop - HEAP_MIN;
+    }
 }    

Modified: head/sys/boot/pc98/loader/main.c
==============================================================================
--- head/sys/boot/pc98/loader/main.c    Tue Dec  8 13:04:26 2009        
(r200254)
+++ head/sys/boot/pc98/loader/main.c    Tue Dec  8 13:06:35 2009        
(r200255)
@@ -97,13 +97,17 @@ main(void)
     bios_getmem();
 
 #if defined(LOADER_BZIP2_SUPPORT)
-    heap_top = PTOV(memtop_copyin);
-    memtop_copyin -= 0x300000;
-    heap_bottom = PTOV(memtop_copyin);
-#else
-    heap_top = (void *)bios_basemem;
-    heap_bottom = (void *)end;
+    if (high_heap_size > 0) {
+       heap_top = PTOV(high_heap_base + high_heap_size);
+       heap_bottom = PTOV(high_heap_base);
+       if (high_heap_base < memtop_copyin)
+           memtop_copyin = high_heap_base;
+    } else
 #endif
+    {
+       heap_top = (void *)PTOV(bios_basemem);
+       heap_bottom = (void *)end;
+    }
     setheap(heap_bottom, heap_top);
 
     /* 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to