Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7f5e3c7 authored by Andi Kleen's avatar Andi Kleen Committed by Andi Kleen
Browse files

[PATCH] Don't access the APIC in safe_smp_processor_id when it is not 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: default avatarAndi Kleen <ak@suse.de>
parent 3fa7c794
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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);

	/*
+1 −1
Original line number Diff line number Diff line
@@ -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();
+1 −0
Original line number Diff line number Diff line
@@ -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