Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Jun 2005 22:31:50 GMT
From:      Paul Saab <ps@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 79020 for review
Message-ID:  <200506262231.j5QMVoo8003077@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=79020

Change 79020 by ps@butter.corp on 2005/06/26 22:31:11

	Duplicate changes for populating dump_avail inline with
	phys_avail from i386.

Affected files ...

.. //depot/projects/hammer/sys/amd64/amd64/dump_machdep.c#18 edit
.. //depot/projects/hammer/sys/amd64/amd64/machdep.c#130 edit
.. //depot/projects/hammer/sys/amd64/include/pmap.h#54 edit

Differences ...

==== //depot/projects/hammer/sys/amd64/amd64/dump_machdep.c#18 (text+ko) ====

@@ -64,37 +64,24 @@
 static size_t fragsz;
 
 /* 20 phys_avail entry pairs correspond to 10 md_pa's */
-static struct md_pa dump_avail[10];
+static struct md_pa dump_map[10];
 
 static void
 md_pa_init(void)
 {
 	int n, idx;
 
-	bzero(&dump_avail, sizeof(dump_avail));
-	for (n = 0; n < sizeof(dump_avail) / sizeof(dump_avail[0]); n++) {
+	bzero(dump_map, sizeof(dump_map));
+	for (n = 0; n < sizeof(dump_map) / sizeof(dump_map[0]); n++) {
 		idx = n * 2;
-		if (phys_avail[idx] == 0 && phys_avail[idx + 1] == 0)
+		if (dump_avail[idx] == 0 && dump_avail[idx + 1] == 0)
 			break;
-		dump_avail[n].md_start = phys_avail[idx];
-		dump_avail[n].md_size = phys_avail[idx + 1] - phys_avail[idx];
-		if (dump_avail[n].md_start == kernphys[1]) {
-			/* Include the kernel, that would be helpful! */
-			dump_avail[n].md_start = kernphys[0];
-			dump_avail[n].md_size += kernphys[1] - kernphys[0];
-		}
-		if (dump_avail[n].md_start == PAGE_SIZE) {
+		dump_map[n].md_start = dump_map[idx];
+		dump_map[n].md_size = dump_avail[idx + 1] - dump_avail[idx];
+		if (dump_map[n].md_start == PAGE_SIZE) {
 			/* Include page zero */
-			dump_avail[n].md_start = 0;
-			dump_avail[n].md_size += PAGE_SIZE;
-		}
-		if (dump_avail[n].md_start == 0 && dump_avail[n].md_size >= 0x98000) {
-			/* Include mpboot code and/or bios EBDA */
-			dump_avail[n].md_size = 0xA0000;
-		}
-		if (phys_avail[idx + 1] == avail_end) {
-			/* Include msgbuf, that would be helpful! */
-			dump_avail[n].md_size += (Maxmem << PAGE_SHIFT) - avail_end;
+			dump_map[n].md_start = 0;
+			dump_map[n].md_size += PAGE_SIZE;
 		}
 	}
 }
@@ -103,7 +90,7 @@
 md_pa_first(void)
 {
 
-	return (&dump_avail[0]);
+	return (&dump_map[0]);
 }
 
 static struct md_pa *

==== //depot/projects/hammer/sys/amd64/amd64/machdep.c#130 (text+ko) ====

@@ -159,9 +159,11 @@
 long realmem = 0;
 
 vm_paddr_t phys_avail[20];
+vm_paddr_t dump_avail[20];
 
 /* must be 2 less so 0 0 can signal end of chunks */
-#define PHYS_AVAIL_ARRAY_END ((sizeof(phys_avail) / sizeof(vm_offset_t)) - 2)
+#define PHYS_AVAIL_ARRAY_END ((sizeof(phys_avail) / sizeof(phys_avail[0])) - 2)
+#define DUMP_AVAIL_ARRAY_END ((sizeof(dump_avail) / sizeof(dump_avail[0])) - 2)
 
 struct kva_md_info kmi;
 
@@ -848,7 +850,7 @@
 
 u_int basemem;
 
-vm_paddr_t kernphys[2];
+static vm_paddr_t kernphys[2];
 
 /*
  * Populate the (physmap) array with base/bound pairs describing the
@@ -866,7 +868,7 @@
 static void
 getmemsize(caddr_t kmdp, u_int64_t first)
 {
-	int i, physmap_idx, pa_indx;
+	int i, physmap_idx, pa_indx, da_indx;
 	vm_paddr_t pa, physmap[PHYSMAP_SIZE];
 	u_long physmem_tunable;
 	pt_entry_t *pte;
@@ -982,6 +984,8 @@
 	pa_indx = 0;
 	phys_avail[pa_indx++] = physmap[0];
 	phys_avail[pa_indx] = physmap[0];
+	dump_avail[da_indx++] = physmap[0];
+	dump_avail[da_indx] = physmap[0];
 	pte = CMAP1;
 
 	/*
@@ -1008,14 +1012,15 @@
 		if (physmap[i + 1] < end)
 			end = trunc_page(physmap[i + 1]);
 		for (pa = round_page(physmap[i]); pa < end; pa += PAGE_SIZE) {
-			int tmp, page_bad;
+			int tmp, page_bad, full;
 			int *ptr = (int *)CADDR1;
 
+			full = FALSE
 			/*
 			 * block out kernel memory as not available.
 			 */
 			if (pa >= kernphys[0] && pa < kernphys[1])
-				continue;
+				goto do_dump_avail;
 
  			/*
  			 * block out dcons buffer
@@ -1023,7 +1028,7 @@
  			if (dcons_addr > 0
  			    && pa >= trunc_page(dcons_addr)
  			    && pa < dcons_addr + dcons_size)
- 				continue;
+ 				goto do_dump_avail;
 
 			page_bad = FALSE;
 
@@ -1087,12 +1092,28 @@
 					printf(
 		"Too many holes in the physical address space, giving up\n");
 					pa_indx--;
-					break;
+					full = TRUE;
+					goto do_dump_avail;
 				}
 				phys_avail[pa_indx++] = pa;	/* start */
 				phys_avail[pa_indx] = pa + PAGE_SIZE; /* end */
 			}
 			physmem++;
+do_dump_avail:
+			if (dump_avail[da_indx] == pa) {
+				dump_avail[da_indx] += PAGE_SIZE;
+			} else {
+				da_indx++;
+				if (da_indx == DUMP_AVAIL_ARRAY_END) {
+					da_indx--;
+					goto do_next;
+				}
+				dump_avail[da_indx++] = pa; /* start */
+				dump_avail[da_indx] = pa + PAGE_SIZE; /* end */
+			}
+do_next:
+			if (full)
+				break;
 		}
 	}
 	*pte = 0;

==== //depot/projects/hammer/sys/amd64/include/pmap.h#54 (text+ko) ====

@@ -282,7 +282,7 @@
 extern pt_entry_t *CMAP1;
 extern vm_paddr_t avail_end;
 extern vm_paddr_t phys_avail[];
-extern vm_paddr_t kernphys[];
+extern vm_paddr_t dump_avail[];
 extern vm_offset_t virtual_avail;
 extern vm_offset_t virtual_end;
 



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