Port-xen archive

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

Re: NetBSD crashes on 4 GB Supermicro



I have some sort of answer now.

In xen_machdep.c:

  xpmap_get_bootptep checks if PG_V is set. If not, it returns (void *)-1;

  xpmap_get_bootpte returns simply xpmap_get_bootptep(va)[0]. If
  xpmap_get_bootptep returned (void *)-1, the domain will crash right here.

I modified things slightly so the condition could be returned back to
xpmap_init. When this happens I had the loop continue.

This seems to make it boot reliably.

This needs to be looked at more closely, but I need to get some sleep.
This has made my brain hurt.

----------------------------------------

--- ../../../xen/i386/xen_machdep.c.old  2006-04-07 08:51:25.000000000 -0400
+++ ../../../xen/i386/xen_machdep.c     2007-05-05 00:32:49.000000000 -0400
@@ -307,8 +313,16 @@
 static pt_entry_t
 xpmap_get_bootpte(paddr_t va)
 {
+#ifdef PANIX4G
+  pt_entry_t *x;

+  x=xpmap_get_bootptep(va);
+  if (x==(void *)-1)
+    return 0;
+  return x[0];
+#else
        return xpmap_get_bootptep(va)[0];
+#endif
 }

 #if defined(XENDEBUG)
@@ -418,6 +434,12 @@
                                continue;
                        if (ptp[j] >= KERNTEXTOFF) {
                                pte = ptp[j];
+#ifdef PANIX4G
+                               if (xpmap_get_bootpte(pte & PG_FRAME)==0) {
+                                 XENPRINTK(("PANIX 4, XXX\n"));
+                                 continue;
+                               }
+#endif
                                ptp[j] = (pte & ~PG_FRAME) |
                                        (xpmap_get_bootpte(pte & PG_FRAME) &
                                            PG_FRAME);




Home | Main Index | Thread Index | Old Index