Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Aug 2006 13:55:43 GMT
From:      Jue Yuan <yuanjue@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 104932 for review
Message-ID:  <200608241355.k7ODthFb084340@repoman.freebsd.org>

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

Change 104932 by yuanjue@maver-freebsd on 2006/08/24 13:54:54

	two features added:
	1. The option for ignoring ISA hole for domU works now.
	2. kernel for domU now support up to 8MB size. A proper
	   mfsroot could be embedded in kernel now. 
	Submitted by: Yuan, Jue	

Affected files ...

.. //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/i386-xen/xen_machdep.c#2 edit
.. //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/include/vmparam.h#2 edit
.. //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/include/xenvar.h#2 edit

Differences ...

==== //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/i386-xen/xen_machdep.c#2 (text+ko) ====

@@ -634,9 +634,16 @@
 #endif
 	/* 
 	 * pre-zero unused mapped pages - mapped on 4MB boundary
+	 * mapped on 8MB boundary if mfsroot is embedded in kernel
 	 */
 #ifndef PAE
-	round_tmpindex = (((tmpindex - 1) / 1024) + 1)*1024;
+
+#ifndef ADD_MFS_ROOT
+	round_tmpindex = (((tmpindex - 1) / 1024) + 1) * 1024;
+#else
+	round_tmpindex = (((tmpindex - 1) / 1024) + 2) * 1024;
+#endif
+
 #endif
 	bzero((char *)PFNTOV(tmpindex), (round_tmpindex - tmpindex)*PAGE_SIZE); 
 
@@ -687,6 +694,11 @@
 	xen_queue_pt_update(pdir_shadow_ma + (KPTDI + ISA_PDR_OFFSET)*sizeof(vm_paddr_t), 
 			    KPTphys | PG_V | PG_A);
 
+	/*we need at least one more 4MB for mfsroot embedded in kernel*/
+#ifdef ADD_MFS_ROOT
+	xen_queue_pt_update(pdir_shadow_ma + (KPTDI + ISA_PDR_OFFSET + 1)*sizeof(vm_paddr_t), 
+			    xpmap_ptom(VTOP(startinfo->pt_base + (2 * PAGE_SIZE))) | PG_V | PG_A);
+#endif
 	xen_flush_queue();
 
 
@@ -720,20 +732,40 @@
 	if (tmpindex > 980)
 		__asm__("int3");
 #endif
-	/* unmap remaining pages from initial 4MB chunk 
+	/* unmap remaining pages from initial 4MB chunk
+	 * 8MB chunk if mfsroot is embedded in kernel
 	 */
+#ifndef ADD_MFS_ROOT
 	for (i = (tmpindex - ISA_INDEX_OFFSET); i%1024 != 0; i++) 
 		xen_queue_pt_update(KPTphys + i*sizeof(vm_paddr_t), 0);
+#else
+	for (i = (tmpindex - ISA_INDEX_OFFSET); i%2048 != 0; i++) {
+		if (i < 1024) 
+			xen_queue_pt_update(KPTphys + i*sizeof(vm_paddr_t), 0);
+		else
+			xen_queue_pt_update(xpmap_ptom(VTOP(startinfo->pt_base + (2 * PAGE_SIZE))) + (i-1024)*sizeof(vm_paddr_t), 0);
+	}
+#endif
 	xen_flush_queue();
     
 	/* allocate remainder of NKPT pages */
-	for (i = 0; i < NKPT-1; i++, tmpindex++) {
+#ifndef ADD_MFS_ROOT
+	for (i = 0; i < NKPT - 1; i++, tmpindex++) {
 	  /* KERNBASE left unmapped (+ 1) KERNLOAD already mapped (+1) == + 2 */
 		xen_queue_pt_update((vm_paddr_t)(IdlePTDma + KPTDI + i + 1 + ISA_PDR_OFFSET), 
 				    xpmap_ptom((tmpindex << PAGE_SHIFT)| PG_KERNEL));
 		xen_queue_pt_update(pdir_shadow_ma + (KPTDI + i + 1 + ISA_PDR_OFFSET)*sizeof(vm_paddr_t), 
 				    xpmap_ptom((tmpindex << PAGE_SHIFT)| PG_V | PG_A));
 	}
+#else
+	for (i = 0; i < NKPT - 2; i++, tmpindex++) {
+	  /*if mfsroot embedded, 2 PDE has used for bootstrap already*/
+		xen_queue_pt_update((vm_paddr_t)(IdlePTDma + KPTDI + i + 2 + ISA_PDR_OFFSET), 
+				    xpmap_ptom((tmpindex << PAGE_SHIFT)| PG_KERNEL));
+		xen_queue_pt_update(pdir_shadow_ma + (KPTDI + i + 2 + ISA_PDR_OFFSET)*sizeof(vm_paddr_t), 
+				    xpmap_ptom((tmpindex << PAGE_SHIFT)| PG_V | PG_A));
+	}
+#endif
 	tmpindex += NKPT-1;
 	PT_UPDATES_FLUSH();
 
@@ -769,6 +801,7 @@
 	op.u.set_iopl.iopl = 1;
 	PANIC_IF(HYPERVISOR_physdev_op(&op));
 	
+#ifdef ADD_ISA_HOLE
 	/* add page table for KERNBASE */
 	xen_queue_pt_update((vm_paddr_t)(IdlePTDma + KPTDI), 
 			    xpmap_ptom((tmpindex << PAGE_SHIFT)| PG_KERNEL));
@@ -776,6 +809,7 @@
 			    xpmap_ptom((tmpindex << PAGE_SHIFT)| PG_V | PG_A));
 	xen_flush_queue();
 	tmpindex++;
+#endif
  
 	if (xen_start_info->flags & SIF_INITDOMAIN) {
 		/* Map first megabyte */

==== //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/include/vmparam.h#2 (text+ko) ====

@@ -1,1 +1,143 @@
-#include <i386/include/vmparam.h>
+/*-
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ * Copyright (c) 1994 John S. Dyson
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * William Jolitz.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	from: @(#)vmparam.h	5.9 (Berkeley) 5/12/91
+ * $FreeBSD: src/sys/i386/include/vmparam.h,v 1.39 2004/08/16 08:35:22 obrien Exp $
+ */
+
+
+#ifndef _MACHINE_VMPARAM_H_
+#define _MACHINE_VMPARAM_H_ 1
+
+/*
+ * Machine dependent constants for 386.
+ */
+
+#define VM_PROT_READ_IS_EXEC	/* if you can read -- then you can exec */
+
+/*
+ * Virtual memory related constants, all in bytes
+ */
+#define	MAXTSIZ		(128UL*1024*1024)	/* max text size */
+#ifndef DFLDSIZ
+#define	DFLDSIZ		(128UL*1024*1024)	/* initial data size limit */
+#endif
+#ifndef MAXDSIZ
+#define	MAXDSIZ		(512UL*1024*1024)	/* max data size */
+#endif
+#ifndef	DFLSSIZ
+#define	DFLSSIZ		(8UL*1024*1024)		/* initial stack size limit */
+#endif
+#ifndef	MAXSSIZ
+#define	MAXSSIZ		(64UL*1024*1024)	/* max stack size */
+#endif
+#ifndef SGROWSIZ
+#define SGROWSIZ	(128UL*1024)		/* amount to grow stack */
+#endif
+
+#define USRTEXT		(1*PAGE_SIZE)		/* base of user text XXX bogus */
+
+/*
+ * The time for a process to be blocked before being very swappable.
+ * This is a number of seconds which the system takes as being a non-trivial
+ * amount of real time.  You probably shouldn't change this;
+ * it is used in subtle ways (fractions and multiples of it are, that is, like
+ * half of a ``long time'', almost a long time, etc.)
+ * It is related to human patience and other factors which don't really
+ * change over time.
+ */
+#define	MAXSLP 		20
+
+
+/*
+ * Kernel physical load address.
+ */
+#ifndef KERNLOAD
+
+#ifdef ADD_ISA_HOLE
+#define	KERNLOAD		(1 << PDRSHIFT)
+#else
+#define KERNLOAD		0	/*ISA Hole is what belows KERNLOAD*/
+#endif
+
+#endif
+
+/*
+ * Virtual addresses of things.  Derived from the page directory and
+ * page table indexes from pmap.h for precision.
+ * Because of the page that is both a PD and PT, it looks a little
+ * messy at times, but hey, we'll do anything to save a page :-)
+ */
+
+#define VM_MAX_KERNEL_ADDRESS	VADDR(KPTDI+NKPDE-1, NPTEPG-1)
+#define VM_MIN_KERNEL_ADDRESS	VADDR(PTDPTDI, PTDPTDI)
+
+#define	KERNBASE		VADDR(KPTDI, 0)
+
+#define UPT_MAX_ADDRESS		VADDR(PTDPTDI, PTDPTDI)
+#define UPT_MIN_ADDRESS		VADDR(PTDPTDI, 0)
+
+#define VM_MAXUSER_ADDRESS	VADDR(PTDPTDI, 0)
+
+#define USRSTACK		VM_MAXUSER_ADDRESS
+
+#define VM_MAX_ADDRESS		VADDR(PTDPTDI, PTDPTDI)
+#define VM_MIN_ADDRESS		((vm_offset_t)0)
+
+/* virtual sizes (bytes) for various kernel submaps */
+#ifndef VM_KMEM_SIZE
+#define VM_KMEM_SIZE		(12 * 1024 * 1024)
+#endif
+
+/*
+ * How many physical pages per KVA page allocated.
+ * min(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE), VM_KMEM_SIZE_MAX)
+ * is the total KVA space allocated for kmem_map.
+ */
+#ifndef VM_KMEM_SIZE_SCALE
+#define	VM_KMEM_SIZE_SCALE	(3)
+#endif
+
+/*
+ * Ceiling on amount of kmem_map kva space.
+ */
+#ifndef VM_KMEM_SIZE_MAX
+#define	VM_KMEM_SIZE_MAX	(320 * 1024 * 1024)
+#endif
+
+/* initial pagein size of beginning of executable file */
+#ifndef VM_INITIAL_PAGEIN
+#define	VM_INITIAL_PAGEIN	16
+#endif
+
+#endif /* _MACHINE_VMPARAM_H_ */

==== //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/include/xenvar.h#2 (text+ko) ====

@@ -19,8 +19,9 @@
  * FreeBSD doesn't
  */
 
-
+#if 0		/*we don't need this for domU*/
 #define ADD_ISA_HOLE
+#endif
 
 #ifdef ADD_ISA_HOLE
 #define ISA_INDEX_OFFSET 1024 
@@ -30,6 +31,9 @@
 #define ISA_PDR_OFFSET 0
 #endif
 
+#if 1
+#define ADD_MFS_ROOT
+#endif
 
 #define PFNTOMFN(i) (((unsigned long *)xen_phys_machine)[(i)])
 #define MFNTOPFN(i) (xen_machine_phys[i])



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