summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2011-11-15 11:03:30 +0100
committerIngo Molnar <mingo@elte.hu>2011-11-15 11:03:30 +0100
commit4a1dba72384193753e44e15d9d05a50be6587271 (patch)
treea4fc4caa6a11413463b59d8521b67e3cb3926320 /arch
parentperf/x86: Enable raw event access to Intel offcore events (diff)
parentoprofile, x86: Fix crash when unloading module (nmi timer mode) (diff)
downloadlinux-4a1dba72384193753e44e15d9d05a50be6587271.tar.xz
linux-4a1dba72384193753e44e15d9d05a50be6587271.zip
Merge branch 'urgent' of git://amd64.org/linux/rric into perf/urgent
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/oprofile/init.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/x86/oprofile/init.c b/arch/x86/oprofile/init.c
index cdfe4c54deca..f148cf652678 100644
--- a/arch/x86/oprofile/init.c
+++ b/arch/x86/oprofile/init.c
@@ -21,6 +21,7 @@ extern int op_nmi_timer_init(struct oprofile_operations *ops);
extern void op_nmi_exit(void);
extern void x86_backtrace(struct pt_regs * const regs, unsigned int depth);
+static int nmi_timer;
int __init oprofile_arch_init(struct oprofile_operations *ops)
{
@@ -31,8 +32,9 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
#ifdef CONFIG_X86_LOCAL_APIC
ret = op_nmi_init(ops);
#endif
+ nmi_timer = (ret != 0);
#ifdef CONFIG_X86_IO_APIC
- if (ret < 0)
+ if (nmi_timer)
ret = op_nmi_timer_init(ops);
#endif
ops->backtrace = x86_backtrace;
@@ -44,6 +46,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
void oprofile_arch_exit(void)
{
#ifdef CONFIG_X86_LOCAL_APIC
- op_nmi_exit();
+ if (!nmi_timer)
+ op_nmi_exit();
#endif
}