core/locking changes for v3.5
Subsystems (4)
Linus,
Please pull the latest core-locking-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core-locking-for-linus
HEAD: 6ff968cca1dfebd4b6fcade87c11658dbfc96932 x86/nmi: Fix the type of the nmiaction.flags field
This update:
- extends and simplifies x86 NMI callback handling code to enhance and fix the HP hw-watchdog driver
- simplifies the x86 NMI callback handling code to fix a kmemcheck bug.
- enhances the hung-task debugger
Thanks,
Ingo
------------------>
Betty Dall (1):
x86/nmi: Fix the type of the nmiaction.flags field
Don Zickus (2):
watchdog, hpwdt: Remove priority option for NMI callback x86/nmi: Add new NMI queues to deal with IO_CHK and SERR
Li Zhong (1):
x86/nmi: Fix page faults by nmiaction if kmemcheck is enabled
Sasha Levin (1):
hung task debugging: Inject NMI when hung and going to panic
arch/x86/include/asm/nmi.h | 22 ++++++++++- arch/x86/kernel/nmi.c | 83 +++++++++++++------------------------------- drivers/watchdog/hpwdt.c | 46 +++++++++++++------------ kernel/hung_task.c | 4 ++- 4 files changed, 71 insertions(+), 84 deletions(-)
arch/x86/include/asm/nmi.h +20 -2
@@ -27,6 +27,8 @@ void arch_trigger_all_cpu_backtrace(void);enum {NMI_LOCAL =0 ,NMI_UNKNOWN , +NMI_SERR , +NMI_IO_CHECK ,NMI_MAX };
@@ -35,8 +37,24 @@ enum {typedef int (*nmi_handler_t )(unsigned int ,struct pt_regs *); -int register_nmi_handler (unsigned int ,nmi_handler_t ,unsigned long , -const char *); +struct nmiaction { +struct list_head list; +nmi_handler_t handler; +unsigned long flags; +const char *name; +}; + +#define register_nmi_handler (t, fn, fg, n) \ +({ \ + static struct nmiaction fn##_na = { \ + .handler = (fn), \ + .name = (n), \ + .flags = (fg), \ + }; \ + __register_nmi_handler((t), &fn##_na); \ +}) + +int __register_nmi_handler (unsigned int ,struct nmiaction *);void unregister_nmi_handler (unsigned int ,const char *);
arch/x86/kernel/nmi.c +24 -59
136 lines not on this page · raw message
drivers/watchdog/hpwdt.c +24 -22
69 lines not on this page · raw message
kernel/hung_task.c +3 -1
@@ -108,8 +108,10 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)touch_nmi_watchdog (); -if (sysctl_hung_task_panic) +if (sysctl_hung_task_panic) { +trigger_all_cpu_backtrace ();panic ("hung_task: blocked tasks" ); + } }/*