From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeremy Fitzhardinge Subject: Re: Oops Date: Wed, 10 Jan 2007 13:44:09 -0800 Message-ID: <45A55E29.2090207@goop.org> References: <45A399D7.3090205@suse.de> <45A41B60.3070500@goop.org> <45A4A0C7.5050405@suse.de> <45A4C014.9030909@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <45A4C014.9030909@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.osdl.org Errors-To: virtualization-bounces@lists.osdl.org To: Gerd Hoffmann Cc: Virtualization Mailing List List-Id: virtualization@lists.linuxfoundation.org Gerd Hoffmann wrote: > Gerd Hoffmann wrote: > = >> Jeremy Fitzhardinge wrote: >> = >>> Gerd Hoffmann wrote: >>> = >>>> Hi, >>>> >>>> paravirt kernel doesn't boot as xen guest for me, see attachment. >>>> = >>>> = >>> Hm, I just booted a pae kernel from the current paravirt repo and got it >>> to usermode. What's your .config? Also, what line is getting the faul= t? >>> = >> config is attached. >> >> It faults in fork syscall, down in pgd_walk(). It finds a pmd entry >> pointing to a machine page where the mfn_to_pfn translation returns -1 >> aka 0xffffffff. Trying to find a struct page for that one doesn't work = ... >> = > > Looks like a slot-3 pmd got reused for slot-0, with some stale entries > for the hypervisor hole in there for some reason ... > > quick and dirty sledge hammer fix: > > --- paravirt-2.6.20-rc4-hg691.orig/arch/i386/paravirt-xen/enlighten.c > +++ paravirt-2.6.20-rc4-hg691/arch/i386/paravirt-xen/enlighten.c > @@ -522,6 +522,7 @@ static fastcall void xen_alloc_pd(u32 pf > static fastcall void xen_release_pd(u32 pfn) > { > make_lowmem_page_readwrite(__va(PFN_PHYS(pfn))); > + memset(__va(PFN_PHYS(pfn)), 0, PAGE_SIZE); > } > > static fastcall void xen_release_pt(u32 pfn) > = Does this work? diff -r 252f3ed87072 arch/i386/mm/pgtable.c --- a/arch/i386/mm/pgtable.c Mon Jan 08 16:57:56 2007 -0800 +++ b/arch/i386/mm/pgtable.c Wed Jan 10 13:13:40 2007 -0800 @@ -265,6 +265,7 @@ static void pgd_ctor(pgd_t *pgd) swapper_pg_dir + USER_PTRS_PER_PGD, KERNEL_PGD_PTRS); } else { + memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t)); spin_lock_irqsave(&pgd_lock, flags); pgd_list_add(pgd); spin_unlock_irqrestore(&pgd_lock, flags);