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/* We support CPUs that have performance counters like the Pentium Pro 15 * with the NMI mode driver. 16 */ 17 18extern int op_nmi_init(struct oprofile_operations * ops); 19extern int op_nmi_timer_init(struct oprofile_operations * ops); 20extern void op_nmi_exit(void); 21extern void x86_backtrace(struct pt_regs * const regs, unsigned int depth); 22 23 24int __init oprofile_arch_init(struct oprofile_operations * ops) 25{ 26 int ret; 27 28 ret = -ENODEV; 29 30#ifdef CONFIG_X86_LOCAL_APIC 31 ret = op_nmi_init(ops); 32#endif 33#ifdef CONFIG_X86_IO_APIC 34 if (ret < 0) 35 ret = op_nmi_timer_init(ops); 36#endif 37 ops->backtrace = x86_backtrace; 38 39 return ret; 40} 41 42 43void oprofile_arch_exit(void) 44{ 45#ifdef CONFIG_X86_LOCAL_APIC 46 op_nmi_exit(); 47#endif 48} 49