Skip to contentSkip to conversation

core/locking changes for v3.5

GIT PULL Ingo Molnar 1 participant 1 message May 21, 2012

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

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
index fd3f9f1..0e3793b 100644
@@ -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
index c21449f..6df6149 100644
@@ -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");
+	}
 }
 
 /*