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@charite.de> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <20091210165634.GF5086@lenovo> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
5e855db5d8
commit
125580380f
1 changed files with 12 additions and 6 deletions
|
@ -2066,12 +2066,6 @@ static __init int p6_pmu_init(void)
|
||||||
|
|
||||||
x86_pmu = p6_pmu;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2163,6 +2157,16 @@ static __init int amd_pmu_init(void)
|
||||||
return 0;
|
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)
|
void __init init_hw_perf_events(void)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
@ -2184,6 +2188,8 @@ void __init init_hw_perf_events(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pmu_check_apic();
|
||||||
|
|
||||||
pr_cont("%s PMU driver.\n", x86_pmu.name);
|
pr_cont("%s PMU driver.\n", x86_pmu.name);
|
||||||
|
|
||||||
if (x86_pmu.num_events > X86_PMC_MAX_GENERIC) {
|
if (x86_pmu.num_events > X86_PMC_MAX_GENERIC) {
|
||||||
|
|
Loading…
Reference in a new issue