Commit d006de93 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://www.linux-watchdog.org/linux-watchdog

* git://www.linux-watchdog.org/linux-watchdog:
  watchdog: Initconst section fixes for watchdog
  watchdog: lantiq: fix watchdogs timeout handling
  watchdog: hpwdt: prevent multiple "NMI occurred" messages
  watchdog: WatchDog Timer Driver Core - use passed watchdog_device
parents 0ad79ed3 4e8858d5
...@@ -494,15 +494,16 @@ static int hpwdt_pretimeout(struct notifier_block *nb, unsigned long ulReason, ...@@ -494,15 +494,16 @@ static int hpwdt_pretimeout(struct notifier_block *nb, unsigned long ulReason,
asminline_call(&cmn_regs, cru_rom_addr); asminline_call(&cmn_regs, cru_rom_addr);
die_nmi_called = 1; die_nmi_called = 1;
spin_unlock_irqrestore(&rom_lock, rom_pl); spin_unlock_irqrestore(&rom_lock, rom_pl);
if (allow_kdump)
hpwdt_stop();
if (!is_icru) { if (!is_icru) {
if (cmn_regs.u1.ral == 0) { if (cmn_regs.u1.ral == 0) {
printk(KERN_WARNING "hpwdt: An NMI occurred, " panic("An NMI occurred, "
"but unable to determine source.\n"); "but unable to determine source.\n");
} }
} }
if (allow_kdump)
hpwdt_stop();
panic("An NMI occurred, please see the Integrated " panic("An NMI occurred, please see the Integrated "
"Management Log for details.\n"); "Management Log for details.\n");
......
...@@ -51,16 +51,16 @@ static int ltq_wdt_ok_to_close; ...@@ -51,16 +51,16 @@ static int ltq_wdt_ok_to_close;
static void static void
ltq_wdt_enable(void) ltq_wdt_enable(void)
{ {
ltq_wdt_timeout = ltq_wdt_timeout * unsigned long int timeout = ltq_wdt_timeout *
(ltq_io_region_clk_rate / LTQ_WDT_DIVIDER) + 0x1000; (ltq_io_region_clk_rate / LTQ_WDT_DIVIDER) + 0x1000;
if (ltq_wdt_timeout > LTQ_MAX_TIMEOUT) if (timeout > LTQ_MAX_TIMEOUT)
ltq_wdt_timeout = LTQ_MAX_TIMEOUT; timeout = LTQ_MAX_TIMEOUT;
/* write the first password magic */ /* write the first password magic */
ltq_w32(LTQ_WDT_PW1, ltq_wdt_membase + LTQ_WDT_CR); ltq_w32(LTQ_WDT_PW1, ltq_wdt_membase + LTQ_WDT_CR);
/* write the second magic plus the configuration and new timeout */ /* write the second magic plus the configuration and new timeout */
ltq_w32(LTQ_WDT_SR_EN | LTQ_WDT_SR_PWD | LTQ_WDT_SR_CLKDIV | ltq_w32(LTQ_WDT_SR_EN | LTQ_WDT_SR_PWD | LTQ_WDT_SR_CLKDIV |
LTQ_WDT_PW2 | ltq_wdt_timeout, ltq_wdt_membase + LTQ_WDT_CR); LTQ_WDT_PW2 | timeout, ltq_wdt_membase + LTQ_WDT_CR);
} }
static void static void
......
...@@ -173,7 +173,7 @@ static struct notifier_block epx_c3_notifier = { ...@@ -173,7 +173,7 @@ static struct notifier_block epx_c3_notifier = {
.notifier_call = epx_c3_notify_sys, .notifier_call = epx_c3_notify_sys,
}; };
static const char banner[] __initdata = KERN_INFO PFX static const char banner[] __initconst = KERN_INFO PFX
"Hardware Watchdog Timer for Winsystems EPX-C3 SBC: 0.1\n"; "Hardware Watchdog Timer for Winsystems EPX-C3 SBC: 0.1\n";
static int __init watchdog_init(void) static int __init watchdog_init(void)
......
...@@ -59,7 +59,7 @@ static struct watchdog_device *wdd; ...@@ -59,7 +59,7 @@ static struct watchdog_device *wdd;
static int watchdog_ping(struct watchdog_device *wddev) static int watchdog_ping(struct watchdog_device *wddev)
{ {
if (test_bit(WDOG_ACTIVE, &wdd->status)) { if (test_bit(WDOG_ACTIVE, &wddev->status)) {
if (wddev->ops->ping) if (wddev->ops->ping)
return wddev->ops->ping(wddev); /* ping the watchdog */ return wddev->ops->ping(wddev); /* ping the watchdog */
else else
...@@ -81,12 +81,12 @@ static int watchdog_start(struct watchdog_device *wddev) ...@@ -81,12 +81,12 @@ static int watchdog_start(struct watchdog_device *wddev)
{ {
int err; int err;
if (!test_bit(WDOG_ACTIVE, &wdd->status)) { if (!test_bit(WDOG_ACTIVE, &wddev->status)) {
err = wddev->ops->start(wddev); err = wddev->ops->start(wddev);
if (err < 0) if (err < 0)
return err; return err;
set_bit(WDOG_ACTIVE, &wdd->status); set_bit(WDOG_ACTIVE, &wddev->status);
} }
return 0; return 0;
} }
...@@ -105,18 +105,18 @@ static int watchdog_stop(struct watchdog_device *wddev) ...@@ -105,18 +105,18 @@ static int watchdog_stop(struct watchdog_device *wddev)
{ {
int err = -EBUSY; int err = -EBUSY;
if (test_bit(WDOG_NO_WAY_OUT, &wdd->status)) { if (test_bit(WDOG_NO_WAY_OUT, &wddev->status)) {
pr_info("%s: nowayout prevents watchdog to be stopped!\n", pr_info("%s: nowayout prevents watchdog to be stopped!\n",
wdd->info->identity); wddev->info->identity);
return err; return err;
} }
if (test_bit(WDOG_ACTIVE, &wdd->status)) { if (test_bit(WDOG_ACTIVE, &wddev->status)) {
err = wddev->ops->stop(wddev); err = wddev->ops->stop(wddev);
if (err < 0) if (err < 0)
return err; return err;
clear_bit(WDOG_ACTIVE, &wdd->status); clear_bit(WDOG_ACTIVE, &wddev->status);
} }
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment