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>