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

[Xen-changelog] [IA64] SMP_HOST: map pal code on smp host



# 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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.