Module Name:    src
Committed By:   maxv
Date:           Sat Jul 16 17:02:35 UTC 2016

Modified Files:
        src/sys/arch/amd64/amd64: machdep.c
        src/sys/arch/i386/i386: machdep.c
        src/sys/arch/x86/include: machdep.h
        src/sys/arch/x86/x86: x86_machdep.c

Log Message:
Simplify the way physical pages are internalized into the VM system on x86.
Only two functions are called now: init_x86_clusters, which initializes the
memory clusters from the bootinfo, and init_x86_vm, which inserts the pages
from the clusters into VM.


To generate a diff of this commit:
cvs rdiff -u -r1.223 -r1.224 src/sys/arch/amd64/amd64/machdep.c
cvs rdiff -u -r1.758 -r1.759 src/sys/arch/i386/i386/machdep.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/x86/include/machdep.h
cvs rdiff -u -r1.71 -r1.72 src/sys/arch/x86/x86/x86_machdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amd64/amd64/machdep.c
diff -u src/sys/arch/amd64/amd64/machdep.c:1.223 src/sys/arch/amd64/amd64/machdep.c:1.224
--- src/sys/arch/amd64/amd64/machdep.c:1.223	Wed Jul 13 15:53:26 2016
+++ src/sys/arch/amd64/amd64/machdep.c	Sat Jul 16 17:02:34 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.223 2016/07/13 15:53:26 maxv Exp $	*/
+/*	$NetBSD: machdep.c,v 1.224 2016/07/16 17:02:34 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -111,7 +111,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.223 2016/07/13 15:53:26 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.224 2016/07/16 17:02:34 maxv Exp $");
 
 /* #define XENDEBUG_LOW  */
 
@@ -1537,10 +1537,6 @@ init_x86_64(paddr_t first_avail)
 	int x;
 #ifndef XEN
 	int ist;
-	extern struct extent *iomem_ex;
-#if !defined(REALEXTMEM) && !defined(REALBASEMEM)
-	struct btinfo_memmap *bim;
-#endif
 #endif /* !XEN */
 
 #ifdef XEN
@@ -1589,23 +1585,8 @@ init_x86_64(paddr_t first_avail)
 	 */
 	avail_start = 8 * PAGE_SIZE;
 
-#if !defined(REALBASEMEM) && !defined(REALEXTMEM)
-	/*
-	 * Check to see if we have a memory map from the BIOS (passed to us by
-	 * the boot program).
-	 */
-	bim = lookup_bootinfo(BTINFO_MEMMAP);
-	if (bim != NULL && bim->num > 0)
-		initx86_parse_memmap(bim, iomem_ex);
-#endif	/* ! REALBASEMEM && ! REALEXTMEM */
-
-	/*
-	 * If initx86_parse_memmap didn't find any valid segment, fall back to
-	 * former code.
-	 */
-	if (mem_cluster_cnt == 0)
-		initx86_fake_memmap(iomem_ex);
-
+	/* Initialize the memory clusters (needed in pmap_boostrap). */
+	init_x86_clusters();
 #else	/* XEN */
 	/* Parse Xen command line (replace bootinfo) */
 	xen_parse_cmdline(XEN_PARSE_BOOTFLAGS, NULL);
@@ -1629,7 +1610,8 @@ init_x86_64(paddr_t first_avail)
 		pmap_prealloc_lowmem_ptps();
 
 #ifndef XEN
-	initx86_load_memmap(first_avail);
+	/* Internalize the physical pages into the VM system. */
+	init_x86_vm(first_avail);
 #else	/* XEN */
 	kern_end = KERNBASE + first_avail;
 	physmem = xen_start_info.nr_pages;

Index: src/sys/arch/i386/i386/machdep.c
diff -u src/sys/arch/i386/i386/machdep.c:1.758 src/sys/arch/i386/i386/machdep.c:1.759
--- src/sys/arch/i386/i386/machdep.c:1.758	Wed Jul 13 15:53:27 2016
+++ src/sys/arch/i386/i386/machdep.c	Sat Jul 16 17:02:34 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.758 2016/07/13 15:53:27 maxv Exp $	*/
+/*	$NetBSD: machdep.c,v 1.759 2016/07/16 17:02:34 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.758 2016/07/13 15:53:27 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.759 2016/07/16 17:02:34 maxv Exp $");
 
 #include "opt_beep.h"
 #include "opt_compat_ibcs2.h"
@@ -1129,9 +1129,7 @@ init386(paddr_t first_avail)
 	int x;
 #ifndef XEN
 	union descriptor *tgdt;
-	extern struct extent *iomem_ex;
 	struct region_descriptor region;
-	struct btinfo_memmap *bim;
 #endif
 #if NBIOSCALL > 0
 	extern int biostramp_image_size;
@@ -1246,24 +1244,11 @@ init386(paddr_t first_avail)
 	pmap_bootstrap((vaddr_t)atdevbase + IOM_SIZE);
 
 #ifndef XEN
-	/*
-	 * Check to see if we have a memory map from the BIOS (passed to us by
-	 * the boot program).
-	 */
-	bim = lookup_bootinfo(BTINFO_MEMMAP);
-	if ((biosmem_implicit || (biosbasemem == 0 && biosextmem == 0)) &&
-	    bim != NULL && bim->num > 0)
-		initx86_parse_memmap(bim, iomem_ex);
-
-	/*
-	 * If initx86_parse_memmap didn't find any valid segment, fall back to
-	 * former code.
-	 */
-	if (mem_cluster_cnt == 0)
-		initx86_fake_memmap(iomem_ex);
-
-	initx86_load_memmap(first_avail);
+	/* Initialize the memory clusters. */
+	init_x86_clusters();
 
+	/* Internalize the physical pages into the VM system. */
+	init_x86_vm(first_avail);
 #else /* !XEN */
 	XENPRINTK(("load the memory cluster 0x%" PRIx64 " (%" PRId64 ") - "
 	    "0x%" PRIx64 " (%" PRId64 ")\n",

Index: src/sys/arch/x86/include/machdep.h
diff -u src/sys/arch/x86/include/machdep.h:1.7 src/sys/arch/x86/include/machdep.h:1.8
--- src/sys/arch/x86/include/machdep.h:1.7	Thu Jun 12 19:02:35 2014
+++ src/sys/arch/x86/include/machdep.h	Sat Jul 16 17:02:34 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.h,v 1.7 2014/06/12 19:02:35 riastradh Exp $ */
+/* $NetBSD: machdep.h,v 1.8 2016/07/16 17:02:34 maxv Exp $ */
 /*
  * Copyright (c) 2000, 2007 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -41,11 +41,11 @@ void	x86_cpu_idle_init(void);
 void	x86_cpu_idle_get(void (**)(void), char *, size_t);
 void	x86_cpu_idle_set(void (*)(void), const char *, bool);
 
-int	initx86_parse_memmap(struct btinfo_memmap *, struct extent *);
-int	initx86_fake_memmap(struct extent *);
-int	initx86_load_memmap(paddr_t first_avail);
 int	x86_select_freelist(uint64_t);
 
+void	init_x86_clusters(void);
+int	init_x86_vm(paddr_t);
+
 void	x86_startup(void);
 void	x86_sysctl_machdep_setup(struct sysctllog **);
 

Index: src/sys/arch/x86/x86/x86_machdep.c
diff -u src/sys/arch/x86/x86/x86_machdep.c:1.71 src/sys/arch/x86/x86/x86_machdep.c:1.72
--- src/sys/arch/x86/x86/x86_machdep.c:1.71	Sat Jul 16 14:51:45 2016
+++ src/sys/arch/x86/x86/x86_machdep.c	Sat Jul 16 17:02:34 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: x86_machdep.c,v 1.71 2016/07/16 14:51:45 maxv Exp $	*/
+/*	$NetBSD: x86_machdep.c,v 1.72 2016/07/16 17:02:34 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007 YAMAMOTO Takashi,
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.71 2016/07/16 14:51:45 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.72 2016/07/16 17:02:34 maxv Exp $");
 
 #include "opt_modular.h"
 #include "opt_physmem.h"
@@ -588,7 +588,7 @@ add_mem_cluster(phys_ram_seg_t *seg_clus
 	return seg_cluster_cnt;
 }
 
-int
+static int
 initx86_parse_memmap(struct btinfo_memmap *bim, struct extent *iomem_ex)
 {
 	uint64_t seg_start, seg_end;
@@ -663,7 +663,7 @@ initx86_parse_memmap(struct btinfo_memma
 	return 0;
 }
 
-int
+static int
 initx86_fake_memmap(struct extent *iomem_ex)
 {
 	phys_ram_seg_t *cluster;
@@ -816,8 +816,51 @@ x86_load_region(uint64_t seg_start, uint
 	}
 }
 
+/*
+ * init_x86_clusters: retrieve the memory clusters provided by the BIOS, and
+ * initialize mem_clusters.
+ */
+void
+init_x86_clusters(void)
+{
+	extern struct extent *iomem_ex;
+	struct btinfo_memmap *bim;
+
+	/*
+	 * Check to see if we have a memory map from the BIOS (passed to us by
+	 * the boot program).
+	 */
+#ifdef i386
+	bim = lookup_bootinfo(BTINFO_MEMMAP);
+	if ((biosmem_implicit || (biosbasemem == 0 && biosextmem == 0)) &&
+	    bim != NULL && bim->num > 0)
+		initx86_parse_memmap(bim, iomem_ex);
+#else
+#if !defined(REALBASEMEM) && !defined(REALEXTMEM)
+	bim = lookup_bootinfo(BTINFO_MEMMAP);
+	if (bim != NULL && bim->num > 0)
+		initx86_parse_memmap(bim, iomem_ex);
+#else
+	(void)bim, (void)iomem_ex;
+#endif
+#endif
+
+	if (mem_cluster_cnt == 0) {
+		/*
+		 * If initx86_parse_memmap didn't find any valid segment, create
+		 * fake clusters.
+		 */
+		initx86_fake_memmap(iomem_ex);
+	}
+}
+
+/*
+ * init_x86_vm: initialize the VM system on x86. We basically internalize as
+ * many physical pages as we can, starting at avail_start, but we don't
+ * internalize the kernel physical pages (from IOM_END to first_avail).
+ */
 int
-initx86_load_memmap(paddr_t first_avail)
+init_x86_vm(paddr_t first_avail)
 {
 	uint64_t seg_start, seg_end;
 	uint64_t seg_start1, seg_end1;

Reply via email to