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,
XXXn"));
+ continue;
+ }
+#endif
ptp[j] = (pte &
~PG_FRAME) |
(xpmap_get_bootpte(pte & PG_FRAME) &
PG_FRAME);
|