diff options
| -rw-r--r-- | arch/x86/kernel/apic/apic.c | 28 | 
1 files changed, 15 insertions, 13 deletions
| diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 9e2dd2b296cd..2b0faf86da1b 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -1586,9 +1586,6 @@ static void setup_local_APIC(void)  {  	int cpu = smp_processor_id();  	unsigned int value; -#ifdef CONFIG_X86_32 -	int logical_apicid, ldr_apicid; -#endif  	if (disable_apic) {  		disable_ioapic_support(); @@ -1626,16 +1623,21 @@ static void setup_local_APIC(void)  	apic->init_apic_ldr();  #ifdef CONFIG_X86_32 -	/* -	 * APIC LDR is initialized.  If logical_apicid mapping was -	 * initialized during get_smp_config(), make sure it matches the -	 * actual value. -	 */ -	logical_apicid = early_per_cpu(x86_cpu_to_logical_apicid, cpu); -	ldr_apicid = GET_APIC_LOGICAL_ID(apic_read(APIC_LDR)); -	WARN_ON(logical_apicid != BAD_APICID && logical_apicid != ldr_apicid); -	/* always use the value from LDR */ -	early_per_cpu(x86_cpu_to_logical_apicid, cpu) = ldr_apicid; +	if (apic->dest_logical) { +		int logical_apicid, ldr_apicid; + +		/* +		 * APIC LDR is initialized.  If logical_apicid mapping was +		 * initialized during get_smp_config(), make sure it matches +		 * the actual value. +		 */ +		logical_apicid = early_per_cpu(x86_cpu_to_logical_apicid, cpu); +		ldr_apicid = GET_APIC_LOGICAL_ID(apic_read(APIC_LDR)); +		if (logical_apicid != BAD_APICID) +			WARN_ON(logical_apicid != ldr_apicid); +		/* Always use the value from LDR. */ +		early_per_cpu(x86_cpu_to_logical_apicid, cpu) = ldr_apicid; +	}  #endif  	/* | 
