# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID d940ec92958d62d3c03a92cecb2aa13fb9be5d0d
# Parent c18c63f87b7d511eb526a1ddd910b3ff6d069f4a
[IA64] SMP_HOST: map pal code on smp host
On up host, only when rr7 is changed, efi_map_pal_code() is called to
remap pal code on new rr7. But on smp host, efi_map_pal_code is also
called to map pal code for other processors, which may not satisfy rr7
change condition, thus pal code may not be mapped in some processors,
while ia64_pal_halt_light called in startup_cpu_idle_loop will cause
machine crash.
Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx>
diff -r c18c63f87b7d -r d940ec92958d xen/arch/ia64/linux-xen/efi.c
--- a/xen/arch/ia64/linux-xen/efi.c Fri Feb 24 20:38:26 2006
+++ b/xen/arch/ia64/linux-xen/efi.c Fri Feb 24 21:03:07 2006
@@ -534,32 +534,9 @@
{
#ifdef XEN
u64 psr;
- static unsigned long last_rr7 = 0;
- unsigned long current_rr7 = ia64_get_rr(7L<<61);
-
- // this routine is called only once in Linux but may be called
- // multiple times in Xen. However, we only need to flush and
- // reset itr[IA64_TR_PALCODE] if rr7 changes
if (!pal_vaddr) {
pal_vaddr = efi_get_pal_addr ();
- last_rr7 = current_rr7;
- }
- else if (last_rr7 == current_rr7) return;
- else {
- last_rr7 = current_rr7;
- printk("efi_map_pal_code,remapping pal w/rr7=%lx\n",last_rr7);
- }
-
- printf("efi_map_pal_code: about to ia64_ptr(%d,%p,%p)\n",
- 0x1, GRANULEROUNDDOWN((unsigned long) pal_vaddr),
- IA64_GRANULE_SHIFT);
- ia64_ptr(0x1, GRANULEROUNDDOWN((unsigned long) pal_vaddr),
- IA64_GRANULE_SHIFT);
- ia64_srlz_i();
- printf("efi_map_pal_code: about to ia64_itr(%p,%p,%p,%p,%p)\n",
- 0x1, IA64_TR_PALCODE, GRANULEROUNDDOWN((unsigned long)
pal_vaddr),
- pte_val(pfn_pte(__pa(pal_vaddr) >> PAGE_SHIFT, PAGE_KERNEL)),
- IA64_GRANULE_SHIFT);
+ }
#else
void *pal_vaddr = efi_get_pal_addr ();
u64 psr;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|