forked from Minki/linux
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
This commit is contained in:
commit
d006de9353
@ -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 (!is_icru) {
|
|
||||||
if (cmn_regs.u1.ral == 0) {
|
|
||||||
printk(KERN_WARNING "hpwdt: An NMI occurred, "
|
|
||||||
"but unable to determine source.\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allow_kdump)
|
if (allow_kdump)
|
||||||
hpwdt_stop();
|
hpwdt_stop();
|
||||||
|
|
||||||
|
if (!is_icru) {
|
||||||
|
if (cmn_regs.u1.ral == 0) {
|
||||||
|
panic("An NMI occurred, "
|
||||||
|
"but unable to determine source.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
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;
|
|||||||
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 = {
|
|||||||
.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;
|
|||||||
|
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user