On Wed, 3 Aug 2005 15:40:38 +0100, Ian Pratt <m+Ian.Pratt@xxxxxxxxxxxx> wrote:
I think it's probably a property of the SLES 9 compiler used
to compile Xen and Linux. I have two identical machines, one
with SLES 9 and the other with RHEL 4, and the RHEL 4 box
works fine. Also, I have a 3rd machine of a different model
loaded with SLES 9 which is also not booting with PAE 'on'.
That points to SLES 9.
Is it still the case with the very latest tree, i.e. where the default
build is pentiumpro rather than pentium4?
I'm seeing this on an x440 with SLES 9, using changeset 6003.
Interestingly, I make it past this point if I specify mem=4G at boot.
The crash happens very early on when booting Xen so I don't
think Linux can be the problem. I tossed some printk's into
paging_init() (that's where the last line of output came
from in the original boot log) to see if it dies in that function.
It seems to die somewhere in this code as I see the first printk message,
but not the last as it is about to exit:
xen/arch/x86/x86_32/mm.c, starting at line 95:
printk("paging_init: about to allocate and map machine-to-phys table\n");
* Allocate and map the machine-to-phys table and create read-only mapping
* of MPT for guest-OS use. Without PAE we'll end up with one 4MB page,
* with PAE we'll allocate 2MB pages depending on the amount of memory
* installed, but at least 4MB to cover 4GB address space. This is needed
* to make PCI I/O memory address lookups work in guests.
if ( (mpt_size = max_page * 4) < (4*1024*1024) )
mpt_size = 4*1024*1024;
for ( i = 0; i < (mpt_size >> L2_PAGETABLE_SHIFT); i++ )
if ( (pg = alloc_domheap_pages(NULL, PAGETABLE_ORDER, 0)) == NULL )
panic("Not enough memory to bootstrap Xen.\n");
idle_pg_table_l2[l2_linear_offset(RDWR_MPT_VIRT_START) + i] =
l2e_from_page(pg, PAGE_HYPERVISOR | _PAGE_PSE);
idle_pg_table_l2[l2_linear_offset(RO_MPT_VIRT_START) + i] =
l2e_from_page(pg, (__PAGE_HYPERVISOR | _PAGE_PSE) & ~_PAGE_RW);
memset((void *)RDWR_MPT_VIRT_START, 0x55, mpt_size);
/* Create page tables for ioremap(). */
for ( i = 0; i < (IOREMAP_MBYTES >> (L2_PAGETABLE_SHIFT - 20)); i++ )
ioremap_pt = alloc_xenheap_page();
idle_pg_table_l2[l2_linear_offset(IOREMAP_VIRT_START) + i] =
/* Set up mapping cache for domain pages. */
mapcache_order = get_order(MAPCACHE_MBYTES << (20 - PAGETABLE_ORDER));
mapcache = alloc_xenheap_pages(mapcache_order);
memset(mapcache, 0, PAGE_SIZE << mapcache_order);
for ( i = 0; i < (MAPCACHE_MBYTES >> (L2_PAGETABLE_SHIFT - 20)); i++ )
idle_pg_table_l2[l2_linear_offset(MAPCACHE_VIRT_START) + i] =
l2e_from_page(virt_to_page(mapcache) + i, __PAGE_HYPERVISOR);
printk("paging_init: exiting function\n");
Xen-devel mailing list