mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-28 13:34:38 +08:00
3adbbcce9a
This patch cleans up the NMI interrupt path. Instead of being gated by if the 'nmi callback' is set, the interrupt handler now calls everyone who is registered on the die_chain and additionally checks the nmi watchdog, reseting it if enabled. This allows more subsystems to hook into the NMI if they need to (without being block by set_nmi_callback). Signed-off-by: Don Zickus <dzickus@redhat.com> Signed-off-by: Andi Kleen <ak@suse.de>
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
/*
|
|
* linux/include/asm-i386/nmi.h
|
|
*/
|
|
#ifndef ASM_NMI_H
|
|
#define ASM_NMI_H
|
|
|
|
#include <linux/pm.h>
|
|
|
|
struct pt_regs;
|
|
|
|
typedef int (*nmi_callback_t)(struct pt_regs * regs, int cpu);
|
|
|
|
/**
|
|
* set_nmi_callback
|
|
*
|
|
* Set a handler for an NMI. Only one handler may be
|
|
* set. Return 1 if the NMI was handled.
|
|
*/
|
|
void set_nmi_callback(nmi_callback_t callback);
|
|
|
|
/**
|
|
* unset_nmi_callback
|
|
*
|
|
* Remove the handler previously set.
|
|
*/
|
|
void unset_nmi_callback(void);
|
|
|
|
extern int avail_to_resrv_perfctr_nmi_bit(unsigned int);
|
|
extern int avail_to_resrv_perfctr_nmi(unsigned int);
|
|
extern int reserve_perfctr_nmi(unsigned int);
|
|
extern void release_perfctr_nmi(unsigned int);
|
|
extern int reserve_evntsel_nmi(unsigned int);
|
|
extern void release_evntsel_nmi(unsigned int);
|
|
|
|
extern void setup_apic_nmi_watchdog (void *);
|
|
extern int reserve_lapic_nmi(void);
|
|
extern void release_lapic_nmi(void);
|
|
extern void disable_timer_nmi_watchdog(void);
|
|
extern void enable_timer_nmi_watchdog(void);
|
|
extern int nmi_watchdog_tick (struct pt_regs * regs, unsigned reason);
|
|
|
|
extern atomic_t nmi_active;
|
|
extern unsigned int nmi_watchdog;
|
|
#define NMI_DEFAULT -1
|
|
#define NMI_NONE 0
|
|
#define NMI_IO_APIC 1
|
|
#define NMI_LOCAL_APIC 2
|
|
#define NMI_INVALID 3
|
|
|
|
#endif /* ASM_NMI_H */
|