mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-14 04:46:46 +07:00
9c48f1c629
Just convert all the files that have an nmi handler to the new routines. Most of it is straight forward conversion. A couple of places needed some tweaking like kgdb which separates the debug notifier from the nmi handler and mce removes a call to notify_die. [Thanks to Ying for finding out the history behind that mce call https://lkml.org/lkml/2010/5/27/114 And Boris responding that he would like to remove that call because of it https://lkml.org/lkml/2011/9/21/163] The things that get converted are the registeration/unregistration routines and the nmi handler itself has its args changed along with code removal to check which list it is on (most are on one NMI list except for kgdb which has both an NMI routine and an NMI Unknown routine). Signed-off-by: Don Zickus <dzickus@redhat.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Acked-by: Corey Minyard <minyard@acm.org> Cc: Jason Wessel <jason.wessel@windriver.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Robert Richter <robert.richter@amd.com> Cc: Huang Ying <ying.huang@intel.com> Cc: Corey Minyard <minyard@acm.org> Cc: Jack Steiner <steiner@sgi.com> Link: http://lkml.kernel.org/r/1317409584-23662-4-git-send-email-dzickus@redhat.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
51 lines
1.0 KiB
C
51 lines
1.0 KiB
C
/**
|
|
* @file nmi_timer_int.c
|
|
*
|
|
* @remark Copyright 2003 OProfile authors
|
|
* @remark Read the file COPYING
|
|
*
|
|
* @author Zwane Mwaikambo <zwane@linuxpower.ca>
|
|
*/
|
|
|
|
#include <linux/init.h>
|
|
#include <linux/smp.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/oprofile.h>
|
|
#include <linux/rcupdate.h>
|
|
#include <linux/kdebug.h>
|
|
|
|
#include <asm/nmi.h>
|
|
#include <asm/apic.h>
|
|
#include <asm/ptrace.h>
|
|
|
|
static int profile_timer_exceptions_notify(unsigned int val, struct pt_regs *regs)
|
|
{
|
|
oprofile_add_sample(regs, 0);
|
|
return NMI_HANDLED;
|
|
}
|
|
|
|
static int timer_start(void)
|
|
{
|
|
if (register_nmi_handler(NMI_LOCAL, profile_timer_exceptions_notify,
|
|
0, "oprofile-timer"))
|
|
return 1;
|
|
return 0;
|
|
}
|
|
|
|
|
|
static void timer_stop(void)
|
|
{
|
|
unregister_nmi_handler(NMI_LOCAL, "oprofile-timer");
|
|
synchronize_sched(); /* Allow already-started NMIs to complete. */
|
|
}
|
|
|
|
|
|
int __init op_nmi_timer_init(struct oprofile_operations *ops)
|
|
{
|
|
ops->start = timer_start;
|
|
ops->stop = timer_stop;
|
|
ops->cpu_type = "timer";
|
|
printk(KERN_INFO "oprofile: using NMI timer interrupt.\n");
|
|
return 0;
|
|
}
|