[tip:perf/urgent] x86, perf events: Check if we have APIC enabled

From: tip-bot for Cyrill Gorcunov
Date: Thu Dec 10 2009 - 12:20:13 EST


Commit-ID: 125580380f418000b1a06d9a54700f1191b6e561
Gitweb: http://git.kernel.org/tip/125580380f418000b1a06d9a54700f1191b6e561
Author: Cyrill Gorcunov <gorcunov@xxxxxxxxxx>
AuthorDate: Thu, 10 Dec 2009 19:56:34 +0300
Committer: Ingo Molnar <mingo@xxxxxxx>
CommitDate: Thu, 10 Dec 2009 18:00:30 +0100

x86, perf events: Check if we have APIC enabled

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 <Ralf.Hildebrandt@xxxxxxxxxx>
Signed-off-by: Cyrill Gorcunov <gorcunov@xxxxxxxxxx>
Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
Cc: Mike Galbraith <efault@xxxxxx>
Cc: Paul Mackerras <paulus@xxxxxxxxx>
Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx>
LKML-Reference: <20091210165634.GF5086@lenovo>
Signed-off-by: Ingo Molnar <mingo@xxxxxxx>
---
arch/x86/kernel/cpu/perf_event.c | 18 ++++++++++++------
1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index 1342f23..18f05ec 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -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;
}

@@ -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;
@@ -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) {
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/