1 /** 2 * @file init.c 3 * 4 * @remark Copyright 2002 OProfile authors 5 * @remark Read the file COPYING 6 * 7 * @author John Levon <levon@movementarian.org> 8 */ 9 10 #include <linux/oprofile.h> 11 #include <linux/init.h> 12 #include <linux/errno.h> 13 14 /* 15 * We support CPUs that have performance counters like the Pentium Pro 16 * with the NMI mode driver. 17 */ 18 19 extern int op_nmi_init(struct oprofile_operations *ops); 20 extern int op_nmi_timer_init(struct oprofile_operations *ops); 21 extern void op_nmi_exit(void); 22 extern void x86_backtrace(struct pt_regs * const regs, unsigned int depth); 23 24 oprofile_arch_init(struct oprofile_operations * ops)25int __init oprofile_arch_init(struct oprofile_operations *ops) 26 { 27 int ret; 28 29 ret = -ENODEV; 30 31 #ifdef CONFIG_X86_LOCAL_APIC 32 ret = op_nmi_init(ops); 33 #endif 34 #ifdef CONFIG_X86_IO_APIC 35 if (ret < 0) 36 ret = op_nmi_timer_init(ops); 37 #endif 38 ops->backtrace = x86_backtrace; 39 40 return ret; 41 } 42 43 oprofile_arch_exit(void)44void oprofile_arch_exit(void) 45 { 46 #ifdef CONFIG_X86_LOCAL_APIC 47 op_nmi_exit(); 48 #endif 49 } 50