Skip to content

Commit

Permalink
[PATCH] Don't access the APIC in safe_smp_processor_id when it is not…
Browse files Browse the repository at this point in the history
… mapped yet

Lockdep can call the dwarf2 unwinder early, and the dwarf2 code
uses safe_smp_processor_id which tries to access the local APIC page.
But that doesn't work before the APIC code has set up its fixmap.

Check for this case and always return boot cpu then.

Cc: jbeulich@novell.com
Cc: mingo@elte.hu

Signed-off-by: Andi Kleen <ak@suse.de>
  • Loading branch information
Andi Kleen authored and Andi Kleen committed Sep 26, 2006
1 parent 3fa7c79 commit b7f5e3c
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 1 deletion.
2 changes: 2 additions & 0 deletions arch/x86_64/kernel/apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include <asm/timex.h>
#include <asm/apic.h>

int apic_mapped;
int apic_verbosity;
int apic_runs_main_timer;
int apic_calibrate_pmtmr __initdata;
Expand Down Expand Up @@ -600,6 +601,7 @@ void __init init_apic_mappings(void)
apic_phys = mp_lapic_addr;

set_fixmap_nocache(FIX_APIC_BASE, apic_phys);
apic_mapped = 1;
apic_printk(APIC_VERBOSE,"mapped APIC to %16lx (%16lx)\n", APIC_BASE, apic_phys);

/*
Expand Down
2 changes: 1 addition & 1 deletion arch/x86_64/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ int safe_smp_processor_id(void)
{
unsigned apicid, i;

if (disable_apic)
if (disable_apic || !apic_mapped)
return 0;

apicid = hard_smp_processor_id();
Expand Down
1 change: 1 addition & 0 deletions include/asm-x86_64/apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
extern int apic_verbosity;
extern int apic_runs_main_timer;
extern int ioapic_force;
extern int apic_mapped;

/*
* Define the default level of output to be very little
Expand Down

0 comments on commit b7f5e3c

Please sign in to comment.