Skip to content

Commit

Permalink
ftrace: add notrace annotations for NMI routines
Browse files Browse the repository at this point in the history
This annotates NMI functions with notrace. Some tracers may be able
to live with this, but some cannot. The safest is to turn it off,
it's not particularly interesting anyway.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Steven Rostedt authored and Ingo Molnar committed Apr 19, 2008
1 parent 4bd0160 commit 5deb45e
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 14 deletions.
3 changes: 2 additions & 1 deletion arch/x86/kernel/nmi_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,8 @@ EXPORT_SYMBOL(touch_nmi_watchdog);

extern void die_nmi(struct pt_regs *, const char *msg);

__kprobes int nmi_watchdog_tick(struct pt_regs * regs, unsigned reason)
notrace __kprobes int
nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
{

/*
Expand Down
6 changes: 4 additions & 2 deletions arch/x86/kernel/nmi_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,8 @@ void touch_nmi_watchdog(void)
}
EXPORT_SYMBOL(touch_nmi_watchdog);

int __kprobes nmi_watchdog_tick(struct pt_regs * regs, unsigned reason)
notrace __kprobes int
nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
{
int sum;
int touched = 0;
Expand Down Expand Up @@ -384,7 +385,8 @@ int __kprobes nmi_watchdog_tick(struct pt_regs * regs, unsigned reason)

static unsigned ignore_nmis;

asmlinkage __kprobes void do_nmi(struct pt_regs * regs, long error_code)
asmlinkage notrace __kprobes void
do_nmi(struct pt_regs *regs, long error_code)
{
nmi_enter();
add_pda(__nmi_count,1);
Expand Down
12 changes: 6 additions & 6 deletions arch/x86/kernel/traps_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,7 @@ void __kprobes do_general_protection(struct pt_regs *regs, long error_code)
}
}

static __kprobes void
static notrace __kprobes void
mem_parity_error(unsigned char reason, struct pt_regs *regs)
{
printk(KERN_EMERG
Expand All @@ -707,7 +707,7 @@ mem_parity_error(unsigned char reason, struct pt_regs *regs)
clear_mem_error(reason);
}

static __kprobes void
static notrace __kprobes void
io_check_error(unsigned char reason, struct pt_regs *regs)
{
unsigned long i;
Expand All @@ -727,7 +727,7 @@ io_check_error(unsigned char reason, struct pt_regs *regs)
outb(reason, 0x61);
}

static __kprobes void
static notrace __kprobes void
unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
{
if (notify_die(DIE_NMIUNKNOWN, "nmi", regs, reason, 2, SIGINT) == NOTIFY_STOP)
Expand Down Expand Up @@ -755,7 +755,7 @@ unknown_nmi_error(unsigned char reason, struct pt_regs *regs)

static DEFINE_SPINLOCK(nmi_print_lock);

void __kprobes die_nmi(struct pt_regs *regs, const char *msg)
void notrace __kprobes die_nmi(struct pt_regs *regs, const char *msg)
{
if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 2, SIGINT) == NOTIFY_STOP)
return;
Expand Down Expand Up @@ -786,7 +786,7 @@ void __kprobes die_nmi(struct pt_regs *regs, const char *msg)
do_exit(SIGSEGV);
}

static __kprobes void default_do_nmi(struct pt_regs *regs)
static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
{
unsigned char reason = 0;

Expand Down Expand Up @@ -828,7 +828,7 @@ static __kprobes void default_do_nmi(struct pt_regs *regs)

static int ignore_nmis;

__kprobes void do_nmi(struct pt_regs *regs, long error_code)
notrace __kprobes void do_nmi(struct pt_regs *regs, long error_code)
{
int cpu;

Expand Down
11 changes: 6 additions & 5 deletions arch/x86/kernel/traps_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,8 @@ void die(const char * str, struct pt_regs * regs, long err)
oops_end(flags, regs, SIGSEGV);
}

void __kprobes die_nmi(char *str, struct pt_regs *regs, int do_panic)
notrace __kprobes void
die_nmi(char *str, struct pt_regs *regs, int do_panic)
{
unsigned long flags;

Expand Down Expand Up @@ -772,7 +773,7 @@ asmlinkage void __kprobes do_general_protection(struct pt_regs * regs,
die("general protection fault", regs, error_code);
}

static __kprobes void
static notrace __kprobes void
mem_parity_error(unsigned char reason, struct pt_regs * regs)
{
printk(KERN_EMERG "Uhhuh. NMI received for unknown reason %02x.\n",
Expand All @@ -796,7 +797,7 @@ mem_parity_error(unsigned char reason, struct pt_regs * regs)
outb(reason, 0x61);
}

static __kprobes void
static notrace __kprobes void
io_check_error(unsigned char reason, struct pt_regs * regs)
{
printk("NMI: IOCK error (debug interrupt?)\n");
Expand All @@ -810,7 +811,7 @@ io_check_error(unsigned char reason, struct pt_regs * regs)
outb(reason, 0x61);
}

static __kprobes void
static notrace __kprobes void
unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
{
if (notify_die(DIE_NMIUNKNOWN, "nmi", regs, reason, 2, SIGINT) == NOTIFY_STOP)
Expand All @@ -827,7 +828,7 @@ unknown_nmi_error(unsigned char reason, struct pt_regs * regs)

/* Runs on IST stack. This code must keep interrupts off all the time.
Nested NMIs are prevented by the CPU. */
asmlinkage __kprobes void default_do_nmi(struct pt_regs *regs)
asmlinkage notrace __kprobes void default_do_nmi(struct pt_regs *regs)
{
unsigned char reason = 0;
int cpu;
Expand Down

0 comments on commit 5deb45e

Please sign in to comment.