mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge branch 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull core locking updates from Ingo Molnar:
"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"
* 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/nmi: Fix the type of the nmiaction.flags field
x86/nmi: Fix page faults by nmiaction if kmemcheck is enabled
x86/nmi: Add new NMI queues to deal with IO_CHK and SERR
watchdog, hpwdt: Remove priority option for NMI callback
hung task debugging: Inject NMI when hung and going to panic
This commit is contained in:
commit
5ec29e3149
4 changed files with 71 additions and 84 deletions
|
|
@ -147,7 +147,6 @@ struct cmn_registers {
|
|||
|
||||
static unsigned int hpwdt_nmi_decoding;
|
||||
static unsigned int allow_kdump;
|
||||
static unsigned int priority; /* hpwdt at end of die_notify list */
|
||||
static unsigned int is_icru;
|
||||
static DEFINE_SPINLOCK(rom_lock);
|
||||
static void *cru_rom_addr;
|
||||
|
|
@ -723,28 +722,35 @@ static int __devinit hpwdt_init_nmi_decoding(struct pci_dev *dev)
|
|||
}
|
||||
|
||||
/*
|
||||
* If the priority is set to 1, then we will be put first on the
|
||||
* die notify list to handle a critical NMI. The default is to
|
||||
* be last so other users of the NMI signal can function.
|
||||
* Only one function can register for NMI_UNKNOWN
|
||||
*/
|
||||
retval = register_nmi_handler(NMI_UNKNOWN, hpwdt_pretimeout,
|
||||
(priority) ? NMI_FLAG_FIRST : 0,
|
||||
"hpwdt");
|
||||
if (retval != 0) {
|
||||
dev_warn(&dev->dev,
|
||||
"Unable to register a die notifier (err=%d).\n",
|
||||
retval);
|
||||
if (cru_rom_addr)
|
||||
iounmap(cru_rom_addr);
|
||||
}
|
||||
retval = register_nmi_handler(NMI_UNKNOWN, hpwdt_pretimeout, 0, "hpwdt");
|
||||
if (retval)
|
||||
goto error;
|
||||
retval = register_nmi_handler(NMI_SERR, hpwdt_pretimeout, 0, "hpwdt");
|
||||
if (retval)
|
||||
goto error1;
|
||||
retval = register_nmi_handler(NMI_IO_CHECK, hpwdt_pretimeout, 0, "hpwdt");
|
||||
if (retval)
|
||||
goto error2;
|
||||
|
||||
dev_info(&dev->dev,
|
||||
"HP Watchdog Timer Driver: NMI decoding initialized"
|
||||
", allow kernel dump: %s (default = 0/OFF)"
|
||||
", priority: %s (default = 0/LAST).\n",
|
||||
(allow_kdump == 0) ? "OFF" : "ON",
|
||||
(priority == 0) ? "LAST" : "FIRST");
|
||||
", allow kernel dump: %s (default = 0/OFF)\n",
|
||||
(allow_kdump == 0) ? "OFF" : "ON");
|
||||
return 0;
|
||||
|
||||
error2:
|
||||
unregister_nmi_handler(NMI_SERR, "hpwdt");
|
||||
error1:
|
||||
unregister_nmi_handler(NMI_UNKNOWN, "hpwdt");
|
||||
error:
|
||||
dev_warn(&dev->dev,
|
||||
"Unable to register a die notifier (err=%d).\n",
|
||||
retval);
|
||||
if (cru_rom_addr)
|
||||
iounmap(cru_rom_addr);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void hpwdt_exit_nmi_decoding(void)
|
||||
|
|
@ -881,10 +887,6 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
|
|||
#ifdef CONFIG_HPWDT_NMI_DECODING
|
||||
module_param(allow_kdump, int, 0);
|
||||
MODULE_PARM_DESC(allow_kdump, "Start a kernel dump after NMI occurs");
|
||||
|
||||
module_param(priority, int, 0);
|
||||
MODULE_PARM_DESC(priority, "The hpwdt driver handles NMIs first or last"
|
||||
" (default = 0/Last)\n");
|
||||
#endif /* !CONFIG_HPWDT_NMI_DECODING */
|
||||
|
||||
module_init(hpwdt_init);
|
||||
|
|
|
|||
Loading…
Reference in a new issue