Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Dom0 PAE panic when starting xend



On Tue, Mar 10, 2009 at 05:59:47PM +0100, Christoph Egger wrote:
> >
> > [1] http://www.netbsd.org/~jym/xenevt.c.diff
> 
> The output with this patch is:
> 
> store_mfn: MFN 1050807 PFN 1431654400
> store_mfn: MFN 1050807 PFN 1431654400
> (XEN) mm.c:1784:d0 Error pfn 55555: rd=ff2b4100, od=00000000, caf=00000000, 
> taf=00000000
> (XEN) mm.c:712:d0 Error getting mfn 55555 (pfn 55555555) from L1 entry 
> 0000000055555067 for dom0
> xpq_flush_queue: 1 entries 
> 0x000000010211d608: 0x0000000055555067
> panic: HYPERVISOR_mmu_update failed

Is it really called twice ? If so why is it working the first time and
not the second ?
I also notice 1431654400 is 0x55555000. Is it really what xenbus_probe_init()
did allocate ?
This one will overflow a << PAGE_SHIFT. Also xen_start_info.store_mfn is
32bit on i386 (even PAE) so we have to cast it before << PAGE_SHIFT.
Does the attached patch (in place or jym's one) help ?

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--
Index: arch/xen/xen/xenevt.c
===================================================================
RCS file: /pub/NetBSD-CVS/src/sys/arch/xen/xen/xenevt.c,v
retrieving revision 1.30
diff -u -u -r1.30 xenevt.c
--- arch/xen/xen/xenevt.c       17 Dec 2008 20:51:33 -0000      1.30
+++ arch/xen/xen/xenevt.c       10 Mar 2009 15:26:13 -0000
@@ -371,8 +371,12 @@
                /* only one page, so off is always 0 */
                if (off != 0)
                        return -1;
-               return x86_btop(
-                   xpmap_mtop(xen_start_info.store_mfn << PAGE_SHIFT));
+
+               printf("store_mfn: MFN %llu PFN %llu\n",
+                       (unsigned long long)xen_start_info.store_mfn,
+                       xpmap_mtop(xen_start_info.store_mfn << PAGE_SHIFT));
+
+               return xpmap_mtop((paddr_t)xen_start_info.store_mfn << 
PAGE_SHIFT) >> PAGE_SHIFT;
        }
 #endif
        return -1;


Home | Main Index | Thread Index | Old Index