ia64/xen-unstable

changeset 8919:d940ec92958d

[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@intel.com>
author awilliam@xenbuild.aw
date Fri Feb 24 14:03:07 2006 -0700 (2006-02-24)
parents c18c63f87b7d
children 6c43118bdba8
files xen/arch/ia64/linux-xen/efi.c
line diff
     1.1 --- a/xen/arch/ia64/linux-xen/efi.c	Fri Feb 24 13:38:26 2006 -0700
     1.2 +++ b/xen/arch/ia64/linux-xen/efi.c	Fri Feb 24 14:03:07 2006 -0700
     1.3 @@ -534,32 +534,9 @@ efi_map_pal_code (void)
     1.4  {
     1.5  #ifdef XEN
     1.6  	u64 psr;
     1.7 -	static unsigned long last_rr7 = 0;
     1.8 -	unsigned long current_rr7 = ia64_get_rr(7L<<61);
     1.9 -
    1.10 -	// this routine is called only once in Linux but may be called
    1.11 -	// multiple times in Xen.  However, we only need to flush and
    1.12 -	// reset itr[IA64_TR_PALCODE] if rr7 changes
    1.13  	if (!pal_vaddr) {
    1.14  		pal_vaddr = efi_get_pal_addr ();
    1.15 -		last_rr7 = current_rr7;
    1.16  	}
    1.17 -	else if (last_rr7 == current_rr7) return;
    1.18 -	else {
    1.19 -		last_rr7 = current_rr7;
    1.20 -		printk("efi_map_pal_code,remapping pal w/rr7=%lx\n",last_rr7);
    1.21 -	}
    1.22 -
    1.23 -	printf("efi_map_pal_code: about to ia64_ptr(%d,%p,%p)\n",
    1.24 -		0x1, GRANULEROUNDDOWN((unsigned long) pal_vaddr),
    1.25 -		 IA64_GRANULE_SHIFT);
    1.26 -	ia64_ptr(0x1, GRANULEROUNDDOWN((unsigned long) pal_vaddr),
    1.27 -		 IA64_GRANULE_SHIFT);
    1.28 -	ia64_srlz_i();
    1.29 -	printf("efi_map_pal_code: about to ia64_itr(%p,%p,%p,%p,%p)\n",
    1.30 -		0x1, IA64_TR_PALCODE, GRANULEROUNDDOWN((unsigned long) pal_vaddr),
    1.31 -		 pte_val(pfn_pte(__pa(pal_vaddr) >> PAGE_SHIFT, PAGE_KERNEL)),
    1.32 -		 IA64_GRANULE_SHIFT);
    1.33  #else
    1.34  	void *pal_vaddr = efi_get_pal_addr ();
    1.35  	u64 psr;