Keir, Ian,
The local_setup_timer prototype was bad. The
call from start secondary() to it was calling with out the CPU parameter. Eventually
the CPU parameter received by the local_setup_timer is bogus (big negative
number). With such a big cpu number the per_cpu macro was trying to access totally
wrong memory location (per cpu data offset for big –ve no cpu) causing
the unhandled page fault. Because the dom0 was panicking the error information
on the serial console was also not going through, giving just clueless hang.
With hyper call based debug statement I could find out what was going wrong in
the dom0.
Signed-Off-By: Nitin A Kamble <nitin.a.kamble@xxxxxxxxx>
diff -r 446aa56ca4fee7d3ea2badfb59e8bb3540b507ae
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/smpboot.c
---
a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/smpboot.c
Mon Oct 17 12:50:28 2005
+++
b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/smpboot.c
Mon Oct 17 18:07:11 2005
@@ -445,7 +445,7 @@
}
#ifdef CONFIG_XEN
-extern void local_setup_timer(void);
+extern void local_setup_timer(unsigned int cpu);
#endif
/*
@@ -478,7 +478,7 @@
enable_APIC_timer();
#else
- local_setup_timer();
+
local_setup_timer(smp_processor_id());
smp_intr_init();
local_irq_enable();
#endif
Thanks & Regards,
Nitin
-----------------------------------------------------------------------------------
Open Source Technology Center, Intel Corp