svn commit: r200255 - in head/sys/boot/pc98: libpc98 loader

Takahashi Yoshihiro nyan at FreeBSD.org
Tue Dec 8 13:06:36 UTC 2009


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);
 
     /* 


More information about the svn-src-head mailing list