Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Dec 2009 13:06:35 +0000 (UTC)
From:      Takahashi Yoshihiro <nyan@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r200255 - in head/sys/boot/pc98: libpc98 loader
Message-ID:  <200912081306.nB8D6Z4D088701@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 
     /* 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912081306.nB8D6Z4D088701>