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 19extern int op_nmi_init(struct oprofile_operations *ops); 20extern int op_nmi_timer_init(struct oprofile_operations *ops); 21extern void op_nmi_exit(void); 22extern void x86_backtrace(struct pt_regs * const regs, unsigned int depth); 23 24static int nmi_timer; 25 26int __init oprofile_arch_init(struct oprofile_operations *ops) 27{ 28 int ret; 29 30 ret = -ENODEV; 31 32#ifdef CONFIG_X86_LOCAL_APIC 33 ret = op_nmi_init(ops); 34#endif 35 nmi_timer = (ret != 0); 36#ifdef CONFIG_X86_IO_APIC 37 if (nmi_timer) 38 ret = op_nmi_timer_init(ops); 39#endif 40 ops->backtrace = x86_backtrace; 41 42 return ret; 43} 44 45 46void oprofile_arch_exit(void) 47{ 48#ifdef CONFIG_X86_LOCAL_APIC 49 if (!nmi_timer) 50 op_nmi_exit(); 51#endif 52} 53