Commit a8051fde6b71ac9a0e63c861c81c59ba776175f9
Exists in
master
and in
7 other branches
Merge git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
* git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog: Revert "[WATCHDOG] hpwdt: Fix NMI handling." [WATCHDOG] hpwdt: Add CFLAGS to get driver working Revert "[WATCHDOG] make watchdog/hpwdt.c:asminline_call() static"
Showing 2 changed files Side-by-side Diff
drivers/watchdog/Makefile
... | ... | @@ -68,6 +68,7 @@ |
68 | 68 | obj-$(CONFIG_I6300ESB_WDT) += i6300esb.o |
69 | 69 | obj-$(CONFIG_ITCO_WDT) += iTCO_wdt.o iTCO_vendor_support.o |
70 | 70 | obj-$(CONFIG_IT8712F_WDT) += it8712f_wdt.o |
71 | +CFLAGS_hpwdt.o += -O | |
71 | 72 | obj-$(CONFIG_HP_WATCHDOG) += hpwdt.o |
72 | 73 | obj-$(CONFIG_SC1200_WDT) += sc1200wdt.o |
73 | 74 | obj-$(CONFIG_SCx200_WDT) += scx200_wdt.o |
drivers/watchdog/hpwdt.c
... | ... | @@ -145,8 +145,8 @@ |
145 | 145 | |
146 | 146 | #define HPWDT_ARCH 32 |
147 | 147 | |
148 | -static void asminline_call(struct cmn_registers *pi86Regs, | |
149 | - unsigned long *pRomEntry) | |
148 | +asmlinkage void asminline_call(struct cmn_registers *pi86Regs, | |
149 | + unsigned long *pRomEntry) | |
150 | 150 | { |
151 | 151 | asm("pushl %ebp \n\t" |
152 | 152 | "movl %esp, %ebp \n\t" |
... | ... | @@ -333,8 +333,8 @@ |
333 | 333 | |
334 | 334 | #define HPWDT_ARCH 64 |
335 | 335 | |
336 | -static void asminline_call(struct cmn_registers *pi86Regs, | |
337 | - unsigned long *pRomEntry) | |
336 | +asmlinkage void asminline_call(struct cmn_registers *pi86Regs, | |
337 | + unsigned long *pRomEntry) | |
338 | 338 | { |
339 | 339 | asm("pushq %rbp \n\t" |
340 | 340 | "movq %rsp, %rbp \n\t" |
341 | 341 | |
... | ... | @@ -418,20 +418,23 @@ |
418 | 418 | static unsigned long rom_pl; |
419 | 419 | static int die_nmi_called; |
420 | 420 | |
421 | - if (ulReason == DIE_NMI || ulReason == DIE_NMI_IPI) { | |
422 | - spin_lock_irqsave(&rom_lock, rom_pl); | |
423 | - if (!die_nmi_called) | |
424 | - asminline_call(&cmn_regs, cru_rom_addr); | |
425 | - die_nmi_called = 1; | |
426 | - spin_unlock_irqrestore(&rom_lock, rom_pl); | |
427 | - if (cmn_regs.u1.ral != 0) { | |
428 | - panic("An NMI occurred, please see the Integrated " | |
429 | - "Management Log for details.\n"); | |
430 | - } | |
421 | + if (ulReason != DIE_NMI && ulReason != DIE_NMI_IPI) | |
422 | + return NOTIFY_OK; | |
423 | + | |
424 | + spin_lock_irqsave(&rom_lock, rom_pl); | |
425 | + if (!die_nmi_called) | |
426 | + asminline_call(&cmn_regs, cru_rom_addr); | |
427 | + die_nmi_called = 1; | |
428 | + spin_unlock_irqrestore(&rom_lock, rom_pl); | |
429 | + if (cmn_regs.u1.ral == 0) { | |
430 | + printk(KERN_WARNING "hpwdt: An NMI occurred, " | |
431 | + "but unable to determine source.\n"); | |
432 | + } else { | |
433 | + panic("An NMI occurred, please see the Integrated " | |
434 | + "Management Log for details.\n"); | |
431 | 435 | } |
432 | 436 | |
433 | - die_nmi_called = 0; | |
434 | - return NOTIFY_DONE; | |
437 | + return NOTIFY_STOP; | |
435 | 438 | } |
436 | 439 | |
437 | 440 | /* |