Module Name:    src
Committed By:   maxv
Date:           Fri Jul  1 11:28:18 UTC 2016

Modified Files:
        src/sys/arch/x86/x86: pmap.c

Log Message:
Introduce pmap_bootstrap_valloc and pmap_bootstrap_palloc, that are used
to allocate a virtual/physical address before the VM system has been set
up.

Start using it.


To generate a diff of this commit:
cvs rdiff -u -r1.199 -r1.200 src/sys/arch/x86/x86/pmap.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/x86/x86/pmap.c
diff -u src/sys/arch/x86/x86/pmap.c:1.199 src/sys/arch/x86/x86/pmap.c:1.200
--- src/sys/arch/x86/x86/pmap.c:1.199	Fri Jul  1 11:20:01 2016
+++ src/sys/arch/x86/x86/pmap.c	Fri Jul  1 11:28:18 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.199 2016/07/01 11:20:01 maxv Exp $	*/
+/*	$NetBSD: pmap.c,v 1.200 2016/07/01 11:28:18 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
@@ -171,7 +171,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.199 2016/07/01 11:20:01 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.200 2016/07/01 11:28:18 maxv Exp $");
 
 #include "opt_user_ldt.h"
 #include "opt_lockdebug.h"
@@ -1179,6 +1179,34 @@ pmap_kremove_local(vaddr_t sva, vsize_t 
  */
 
 /*
+ * pmap_bootstrap_valloc: allocate a virtual address in the bootstrap area.
+ * This function is to be used before any VM system has been set up.
+ *
+ * The va is taken from virtual_avail. 
+ */
+static vaddr_t
+pmap_bootstrap_valloc(size_t npages)
+{
+	vaddr_t va = virtual_avail;
+	virtual_avail += npages * PAGE_SIZE;
+	return va;
+}
+
+/*
+ * pmap_bootstrap_palloc: allocate a physical address in the bootstrap area.
+ * This function is to be used before any VM system has been set up.
+ *
+ * The pa is taken from avail_start. 
+ */
+static paddr_t
+pmap_bootstrap_palloc(size_t npages)
+{
+	paddr_t pa = avail_start;
+	avail_start += npages * PAGE_SIZE;
+	return pa;
+}
+
+/*
  * pmap_bootstrap: get the system in a state where it can run with VM
  *	properly enabled (called before main()).   the VM system is
  *      fully init'd later...
@@ -1187,7 +1215,6 @@ pmap_kremove_local(vaddr_t sva, vsize_t 
  *	a PDP for the kernel, and nkpde PTP's for the kernel.
  * => kva_start is the first free virtual address in kernel space
  */
-
 void
 pmap_bootstrap(vaddr_t kva_start)
 {
@@ -1196,7 +1223,6 @@ pmap_bootstrap(vaddr_t kva_start)
 	int i;
 	vaddr_t kva;
 #ifndef XEN
-	pd_entry_t *pde;
 	unsigned long p1i;
 	vaddr_t kva_end;
 #endif
@@ -1318,6 +1344,8 @@ pmap_bootstrap(vaddr_t kva_start)
 
 #ifdef __HAVE_DIRECT_MAP
 
+	pd_entry_t *pde;
+
 	tmpva = (KERNBASE + NKL2_KIMG_ENTRIES * NBPD_L2);
 	pte = PTE_BASE + pl1_i(tmpva);
 
@@ -1485,18 +1513,18 @@ pmap_bootstrap(vaddr_t kva_start)
 	virtual_avail += 3 * PAGE_SIZE;
 	avail_start += 3 * PAGE_SIZE;
 #else /* XEN */
-	idt_vaddr = virtual_avail;			/* don't need pte */
-	idt_paddr = avail_start;			/* steal a page */
+
 #if defined(__x86_64__)
-	virtual_avail += 2 * PAGE_SIZE;
-	avail_start += 2 * PAGE_SIZE;
-#else /* defined(__x86_64__) */
-	virtual_avail += PAGE_SIZE;
-	avail_start += PAGE_SIZE;
+	idt_vaddr = pmap_bootstrap_valloc(2);
+	idt_paddr = pmap_bootstrap_palloc(2);
+#else
+	idt_vaddr = pmap_bootstrap_valloc(1);
+	idt_paddr = pmap_bootstrap_palloc(1);
+
 	/* pentium f00f bug stuff */
-	pentium_idt_vaddr = virtual_avail;		/* don't need pte */
-	virtual_avail += PAGE_SIZE;
-#endif /* defined(__x86_64__) */
+	pentium_idt_vaddr = pmap_bootstrap_valloc(1);
+#endif
+
 #endif /* XEN */
 
 	/*

Reply via email to