Date: Sat, 26 Aug 2006 05:13:06 GMT From: Jue Yuan <yuanjue@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 105084 for review Message-ID: <200608260513.k7Q5D60T099993@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=105084 Change 105084 by yuanjue@maver-freebsd on 2006/08/26 05:12:28 now the kernel should support larger mfsroot initially. MFS_CHUNKS macro is used for it. a mfsroot embedded kernel has been built successfully and is workable, although more tests are needed. Affected files ... .. //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/i386-xen/xen_machdep.c#3 edit .. //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/include/xenvar.h#3 edit Differences ... ==== //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/i386-xen/xen_machdep.c#3 (text+ko) ==== @@ -612,6 +612,10 @@ int j; #endif +#ifdef ADD_MFS_ROOT + int k; +#endif + #ifdef WRITABLE_PAGETABLES printk("using writable pagetables\n"); HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_writable_pagetables); @@ -634,14 +638,14 @@ #endif /* * pre-zero unused mapped pages - mapped on 4MB boundary - * mapped on 8MB boundary if mfsroot is embedded in kernel + * mapped on demand via MFS_CHUNKS if mfsroot is embedded in kernel */ #ifndef PAE #ifndef ADD_MFS_ROOT round_tmpindex = (((tmpindex - 1) / 1024) + 1) * 1024; #else - round_tmpindex = (((tmpindex - 1) / 1024) + 2) * 1024; + round_tmpindex = (((tmpindex - 1) / 1024) + MFS_CHUNKS + 1) * 1024; #endif #endif @@ -694,10 +698,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*/ + /* we need MFS_CHUNKS of 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); + for (i = 0; i < MFS_CHUNKS; i++) + xen_queue_pt_update(pdir_shadow_ma + (KPTDI + ISA_PDR_OFFSET + 1)*sizeof(vm_paddr_t), + xpmap_ptom(VTOP(startinfo->pt_base + ((2+i) * PAGE_SIZE))) | PG_V | PG_A); #endif xen_flush_queue(); @@ -733,17 +738,20 @@ __asm__("int3"); #endif /* unmap remaining pages from initial 4MB chunk - * 8MB chunk if mfsroot is embedded in kernel + * (MFSCHUNK + 1)*4MB 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++) { + for (i = (tmpindex - ISA_INDEX_OFFSET); i % ((MFS_CHUNKS+1)*1024) != 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); + { + for (k = 0; k < MFS_CHUNKS; k++) + xen_queue_pt_update(xpmap_ptom(VTOP(startinfo->pt_base + ((2+k) * PAGE_SIZE))) + (i - 1024*(k+1))*sizeof(vm_paddr_t), 0); + } } #endif xen_flush_queue(); @@ -758,12 +766,12 @@ 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), + for (i = 0; i < NKPT - (1 + MFS_CHUNKS); i++, tmpindex++) { + /* if mfsroot embedded, (1+MFS_CHUNKS) numbers of PDE has used for bootstrap already */ + xen_queue_pt_update((vm_paddr_t)(IdlePTDma + KPTDI + i + 1 + MFS_CHUNKS + 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)); + xen_queue_pt_update(pdir_shadow_ma + (KPTDI + i + 1 + MFS_CHUNKS + ISA_PDR_OFFSET) + *sizeof(vm_paddr_t), xpmap_ptom((tmpindex << PAGE_SHIFT)| PG_V | PG_A)); } #endif tmpindex += NKPT-1; ==== //depot/projects/soc2006/yuanjue-xen3/src/sys/i386-xen/include/xenvar.h#3 (text+ko) ==== @@ -19,7 +19,7 @@ * FreeBSD doesn't */ -#if 0 /*we don't need this for domU*/ +#if 0 /* for domU, we could ignore this safely */ #define ADD_ISA_HOLE #endif @@ -31,10 +31,22 @@ #define ISA_PDR_OFFSET 0 #endif +/* If we embedded mfsroot into kernel, then + * we could get a domU_INSTALL kernel + * NOTE: if it ISN'T needed, remember to make it + * undefined + */ #if 1 #define ADD_MFS_ROOT #endif +#ifdef ADD_MFS_ROOT +/* MFS_CHUNKS could be modified for larger size mfsroot requirement. + * memory space for mfsroot would be (MFS_CHUNKS * 4MB) + */ +#define MFS_CHUNKS 1 +#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?200608260513.k7Q5D60T099993>