Signed-off-by: Andrew Morton --- arch/i386/kernel/entry.S | 3 ++- arch/i386/kernel/nmi.c | 6 +++--- arch/i386/kernel/traps.c | 15 +++++++++------ 3 files changed, 14 insertions(+), 10 deletions(-) diff -puN arch/i386/kernel/entry.S~x86_64-mm-i386-kprobes-nmi arch/i386/kernel/entry.S --- a/arch/i386/kernel/entry.S~x86_64-mm-i386-kprobes-nmi +++ a/arch/i386/kernel/entry.S @@ -725,7 +725,7 @@ KPROBE_END(debug) * check whether we got an NMI on the debug path where the debug * fault happened on the sysenter path. */ -ENTRY(nmi) +KPROBE_ENTRY(nmi) RING0_INT_FRAME pushl %eax CFI_ADJUST_CFA_OFFSET 4 @@ -801,6 +801,7 @@ nmi_16bit_stack: .align 4 .long 1b,iret_exc .previous +KPROBE_END(nmi) KPROBE_ENTRY(int3) RING0_INT_FRAME diff -puN arch/i386/kernel/nmi.c~x86_64-mm-i386-kprobes-nmi arch/i386/kernel/nmi.c --- a/arch/i386/kernel/nmi.c~x86_64-mm-i386-kprobes-nmi +++ a/arch/i386/kernel/nmi.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -882,7 +883,7 @@ EXPORT_SYMBOL(touch_nmi_watchdog); extern void die_nmi(struct pt_regs *, const char *msg); -int nmi_watchdog_tick (struct pt_regs * regs, unsigned reason) +__kprobes int nmi_watchdog_tick(struct pt_regs * regs, unsigned reason) { /* @@ -962,8 +963,7 @@ int nmi_watchdog_tick (struct pt_regs * * This matches the old behaviour. */ rc = 1; - } else - printk(KERN_WARNING "Unknown enabled NMI hardware?!\n"); + } } done: return rc; diff -puN arch/i386/kernel/traps.c~x86_64-mm-i386-kprobes-nmi arch/i386/kernel/traps.c --- a/arch/i386/kernel/traps.c~x86_64-mm-i386-kprobes-nmi +++ a/arch/i386/kernel/traps.c @@ -681,7 +681,8 @@ gp_in_kernel: } } -static void mem_parity_error(unsigned char reason, struct pt_regs * regs) +static __kprobes void +mem_parity_error(unsigned char reason, struct pt_regs * regs) { printk(KERN_EMERG "Uhhuh. NMI received for unknown reason %02x on " "CPU %d.\n", reason, smp_processor_id()); @@ -696,7 +697,8 @@ static void mem_parity_error(unsigned ch clear_mem_error(reason); } -static void io_check_error(unsigned char reason, struct pt_regs * regs) +static __kprobes void +io_check_error(unsigned char reason, struct pt_regs * regs) { unsigned long i; @@ -712,7 +714,8 @@ static void io_check_error(unsigned char outb(reason, 0x61); } -static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs) +static __kprobes void +unknown_nmi_error(unsigned char reason, struct pt_regs * regs) { #ifdef CONFIG_MCA /* Might actually be able to figure out what the guilty party @@ -733,7 +736,7 @@ static void unknown_nmi_error(unsigned c static DEFINE_SPINLOCK(nmi_print_lock); -void die_nmi (struct pt_regs *regs, const char *msg) +void __kprobes die_nmi(struct pt_regs *regs, const char *msg) { if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 2, SIGINT) == NOTIFY_STOP) @@ -765,7 +768,7 @@ void die_nmi (struct pt_regs *regs, cons do_exit(SIGSEGV); } -static void default_do_nmi(struct pt_regs * regs) +static __kprobes void default_do_nmi(struct pt_regs * regs) { unsigned char reason = 0; @@ -803,7 +806,7 @@ static void default_do_nmi(struct pt_reg reassert_nmi(); } -fastcall void do_nmi(struct pt_regs * regs, long error_code) +fastcall __kprobes void do_nmi(struct pt_regs * regs, long error_code) { int cpu; _