Skip to content

Commit

Permalink
x86, perf events: Check if we have APIC enabled
Browse files Browse the repository at this point in the history
Ralf Hildebrandt reported this boot warning:

| Running a vanilla 2.6.32 as Xen DomU, I'm getting:
|
| [    0.000999] CPU: Physical Processor ID: 0
| [    0.000999] CPU: Processor Core ID: 1
| [    0.000999] Performance Events: AMD PMU driver.
| [    0.000999] ------------[ cut here ]------------
| [    0.000999] WARNING: at arch/x86/kernel/apic/apic.c:249 native_apic_write_dummy

So we need to check if APIC functionality is available, and
not just in the P6 driver but elsewhere as well.

Reported-by: Ralf Hildebrandt <[email protected]>
Signed-off-by: Cyrill Gorcunov <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Mike Galbraith <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
LKML-Reference: <20091210165634.GF5086@lenovo>
Signed-off-by: Ingo Molnar <[email protected]>
  • Loading branch information
Cyrill Gorcunov authored and Ingo Molnar committed Dec 10, 2009
1 parent 5e855db commit 1255803
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions arch/x86/kernel/cpu/perf_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -2066,12 +2066,6 @@ static __init int p6_pmu_init(void)

x86_pmu = p6_pmu;

if (!cpu_has_apic) {
pr_info("no APIC, boot with the \"lapic\" boot parameter to force-enable it.\n");
pr_info("no hardware sampling interrupt available.\n");
x86_pmu.apic = 0;
}

return 0;
}

Expand Down Expand Up @@ -2163,6 +2157,16 @@ static __init int amd_pmu_init(void)
return 0;
}

static void __init pmu_check_apic(void)
{
if (cpu_has_apic)
return;

x86_pmu.apic = 0;
pr_info("no APIC, boot with the \"lapic\" boot parameter to force-enable it.\n");
pr_info("no hardware sampling interrupt available.\n");
}

void __init init_hw_perf_events(void)
{
int err;
Expand All @@ -2184,6 +2188,8 @@ void __init init_hw_perf_events(void)
return;
}

pmu_check_apic();

pr_cont("%s PMU driver.\n", x86_pmu.name);

if (x86_pmu.num_events > X86_PMC_MAX_GENERIC) {
Expand Down

0 comments on commit 1255803

Please sign in to comment.