asmlinkage void do_nmi(struct pt_regs * regs, long error_code) { int cpu = safe_smp_processor_id(); nmi_enter(); add_pda(__nmi_count,1); if (!nmi_callback(regs, cpu)) default_do_nmi(regs); nmi_exit(); }
dotraplinkage notrace __kprobes void do_nmi(struct pt_regs *regs, long error_code) { nmi_enter(); inc_irq_stat(__nmi_count); if (!ignore_nmis) default_do_nmi(regs); nmi_exit(); }
int handle_perf_interrupt(struct pt_regs *regs, int fault) { int retval; if (!perf_irq) panic("Unexpected PERF_COUNT interrupt %d\n", fault); nmi_enter(); retval = perf_irq(regs, fault); nmi_exit(); return retval; }
dotraplinkage notrace __kprobes void do_nmi(struct pt_regs *regs, long error_code) { nmi_enter(); #ifdef CONFIG_X86_32 { int cpu; cpu = smp_processor_id(); ++nmi_count(cpu); } #else add_pda(__nmi_count, 1); #endif if (!ignore_nmis) default_do_nmi(regs); nmi_exit(); }
void notrace __kprobes die_nmi(char *str, struct pt_regs *regs, int do_panic) { unsigned long flags; if (notify_die(DIE_NMIWATCHDOG, str, regs, 0, 2, SIGINT) == NOTIFY_STOP) return; flags = oops_begin(); printk(KERN_EMERG "%s", str); printk(" on CPU%d, ip %08lx, registers:\n", smp_processor_id(), regs->ip); show_registers(regs); oops_end(flags, regs, 0); if (do_panic || panic_on_oops) panic("Non maskable interrupt"); nmi_exit(); local_irq_enable(); do_exit(SIGBUS); }
/** * handle_domain_nmi - Invoke the handler for a HW irq belonging to a domain * @domain: The domain where to perform the lookup * @hwirq: The HW irq number to convert to a logical one * @regs: Register file coming from the low-level handling code * * Returns: 0 on success, or -EINVAL if conversion has failed */ int handle_domain_nmi(struct irq_domain *domain, unsigned int hwirq, struct pt_regs *regs) { struct pt_regs *old_regs = set_irq_regs(regs); unsigned int irq; int ret = 0; nmi_enter(); irq = irq_find_mapping(domain, hwirq); /* * ack_bad_irq is not NMI-safe, just report * an invalid interrupt. */ if (likely(irq)) generic_handle_irq(irq); else ret = -EINVAL; nmi_exit(); set_irq_regs(old_regs); return ret; }