diff options
Diffstat (limited to 'arch/x86/oprofile/init.c')
| -rw-r--r-- | arch/x86/oprofile/init.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/x86/oprofile/init.c b/arch/x86/oprofile/init.c index cdfe4c54dec..f148cf65267 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  }  |