Hello! With this patch GNU Mach will boot on Xen in a non-PAE configuration again. I can't check in a PAE configuration. Samuel, is this OK to be checked in?
Index: i386/intel/pmap.c =================================================================== RCS file: /cvsroot/hurd/gnumach/i386/intel/pmap.c,v retrieving revision 1.4.2.16.2.20 diff -u -p -r1.4.2.16.2.20 pmap.c --- i386/intel/pmap.c 11 Nov 2008 02:46:32 -0000 1.4.2.16.2.20 +++ i386/intel/pmap.c 22 Nov 2008 21:33:12 -0000 @@ -793,6 +793,9 @@ void pmap_clear_bootstrap_pagetable(pt_e void *pgt = (void*) ptoa(pfn); if (pde & INTEL_PTE_VALID && pfn != -1) hyp_free_page(atop(pgt), pgt); + else + /* Reached end of start of bootstrap area */ + break; } #if PAE hyp_free_page(atop(dir), dir); For reference, here is the old code vs. the new one: Index: i386/intel/pmap.c =================================================================== RCS file: /cvsroot/hurd/gnumach/i386/intel/pmap.c,v retrieving revision 1.4.2.16.2.20 diff -u -p -r1.4.2.16.2.20 pmap.c --- i386/intel/pmap.c 11 Nov 2008 02:46:32 -0000 1.4.2.16.2.20 +++ i386/intel/pmap.c 22 Nov 2008 21:32:51 -0000 @@ -789,10 +789,23 @@ void pmap_clear_bootstrap_pagetable(pt_e #endif /* PAE */ for (i = 0; i < PAGE_SIZE / sizeof (pt_entry_t); i++) { pt_entry_t pde = dir[i]; +#if 0 /* old */ + unsigned long *ptable = (void*) (pde & INTEL_PTE_PFN); + unsigned long pa = ma_to_pa(ptable); + if (pde & INTEL_PTE_VALID) + hyp_free_page(atop(pa), pa); + else + /* Reached end of start of bootstrap area */ + break; +#elif 1 /* new */ unsigned long pfn = mfn_to_pfn(atop(pde)); void *pgt = (void*) ptoa(pfn); if (pde & INTEL_PTE_VALID && pfn != -1) hyp_free_page(atop(pgt), pgt); + else + /* Reached end of start of bootstrap area */ + break; +#endif } #if PAE hyp_free_page(atop(dir), dir); Regards, Thomas
signature.asc
Description: Digital signature