diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-20 13:24:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-20 13:24:46 -0400 |
commit | d006de93531a9876b26919e9d2bbf562654ab736 (patch) | |
tree | bc4b965e43ea446543cd2407d7bcec3efa9c09b1 | |
parent | 0ad79ed34c909205184cb85e855cdf3e17a6eac8 (diff) | |
parent | 4e8858d5130459c4af80b990c2280115a1d49877 (diff) |
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
-rw-r--r-- | drivers/watchdog/hpwdt.c | 9 | ||||
-rw-r--r-- | drivers/watchdog/lantiq_wdt.c | 8 | ||||
-rw-r--r-- | drivers/watchdog/sbc_epx_c3.c | 2 | ||||
-rw-r--r-- | drivers/watchdog/watchdog_dev.c | 14 |
4 files changed, 17 insertions, 16 deletions
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c index 410fba45378d..809cbda03d7a 100644 --- a/drivers/watchdog/hpwdt.c +++ b/drivers/watchdog/hpwdt.c | |||
@@ -494,15 +494,16 @@ static int hpwdt_pretimeout(struct notifier_block *nb, unsigned long ulReason, | |||
494 | asminline_call(&cmn_regs, cru_rom_addr); | 494 | asminline_call(&cmn_regs, cru_rom_addr); |
495 | die_nmi_called = 1; | 495 | die_nmi_called = 1; |
496 | spin_unlock_irqrestore(&rom_lock, rom_pl); | 496 | spin_unlock_irqrestore(&rom_lock, rom_pl); |
497 | |||
498 | if (allow_kdump) | ||
499 | hpwdt_stop(); | ||
500 | |||
497 | if (!is_icru) { | 501 | if (!is_icru) { |
498 | if (cmn_regs.u1.ral == 0) { | 502 | if (cmn_regs.u1.ral == 0) { |
499 | printk(KERN_WARNING "hpwdt: An NMI occurred, " | 503 | panic("An NMI occurred, " |
500 | "but unable to determine source.\n"); | 504 | "but unable to determine source.\n"); |
501 | } | 505 | } |
502 | } | 506 | } |
503 | |||
504 | if (allow_kdump) | ||
505 | hpwdt_stop(); | ||
506 | panic("An NMI occurred, please see the Integrated " | 507 | panic("An NMI occurred, please see the Integrated " |
507 | "Management Log for details.\n"); | 508 | "Management Log for details.\n"); |
508 | 509 | ||
diff --git a/drivers/watchdog/lantiq_wdt.c b/drivers/watchdog/lantiq_wdt.c index 7d82adac1cb2..102aed0efbf1 100644 --- a/drivers/watchdog/lantiq_wdt.c +++ b/drivers/watchdog/lantiq_wdt.c | |||
@@ -51,16 +51,16 @@ static int ltq_wdt_ok_to_close; | |||
51 | static void | 51 | static void |
52 | ltq_wdt_enable(void) | 52 | ltq_wdt_enable(void) |
53 | { | 53 | { |
54 | ltq_wdt_timeout = ltq_wdt_timeout * | 54 | unsigned long int timeout = ltq_wdt_timeout * |
55 | (ltq_io_region_clk_rate / LTQ_WDT_DIVIDER) + 0x1000; | 55 | (ltq_io_region_clk_rate / LTQ_WDT_DIVIDER) + 0x1000; |
56 | if (ltq_wdt_timeout > LTQ_MAX_TIMEOUT) | 56 | if (timeout > LTQ_MAX_TIMEOUT) |
57 | ltq_wdt_timeout = LTQ_MAX_TIMEOUT; | 57 | timeout = LTQ_MAX_TIMEOUT; |
58 | 58 | ||
59 | /* write the first password magic */ | 59 | /* write the first password magic */ |
60 | ltq_w32(LTQ_WDT_PW1, ltq_wdt_membase + LTQ_WDT_CR); | 60 | ltq_w32(LTQ_WDT_PW1, ltq_wdt_membase + LTQ_WDT_CR); |
61 | /* write the second magic plus the configuration and new timeout */ | 61 | /* write the second magic plus the configuration and new timeout */ |
62 | ltq_w32(LTQ_WDT_SR_EN | LTQ_WDT_SR_PWD | LTQ_WDT_SR_CLKDIV | | 62 | ltq_w32(LTQ_WDT_SR_EN | LTQ_WDT_SR_PWD | LTQ_WDT_SR_CLKDIV | |
63 | LTQ_WDT_PW2 | ltq_wdt_timeout, ltq_wdt_membase + LTQ_WDT_CR); | 63 | LTQ_WDT_PW2 | timeout, ltq_wdt_membase + LTQ_WDT_CR); |
64 | } | 64 | } |
65 | 65 | ||
66 | static void | 66 | static void |
diff --git a/drivers/watchdog/sbc_epx_c3.c b/drivers/watchdog/sbc_epx_c3.c index 3066a5127ca8..eaca366b7234 100644 --- a/drivers/watchdog/sbc_epx_c3.c +++ b/drivers/watchdog/sbc_epx_c3.c | |||
@@ -173,7 +173,7 @@ static struct notifier_block epx_c3_notifier = { | |||
173 | .notifier_call = epx_c3_notify_sys, | 173 | .notifier_call = epx_c3_notify_sys, |
174 | }; | 174 | }; |
175 | 175 | ||
176 | static const char banner[] __initdata = KERN_INFO PFX | 176 | static const char banner[] __initconst = KERN_INFO PFX |
177 | "Hardware Watchdog Timer for Winsystems EPX-C3 SBC: 0.1\n"; | 177 | "Hardware Watchdog Timer for Winsystems EPX-C3 SBC: 0.1\n"; |
178 | 178 | ||
179 | static int __init watchdog_init(void) | 179 | static int __init watchdog_init(void) |
diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c index d33520d0b4c9..1199da0f98cf 100644 --- a/drivers/watchdog/watchdog_dev.c +++ b/drivers/watchdog/watchdog_dev.c | |||
@@ -59,7 +59,7 @@ static struct watchdog_device *wdd; | |||
59 | 59 | ||
60 | static int watchdog_ping(struct watchdog_device *wddev) | 60 | static int watchdog_ping(struct watchdog_device *wddev) |
61 | { | 61 | { |
62 | if (test_bit(WDOG_ACTIVE, &wdd->status)) { | 62 | if (test_bit(WDOG_ACTIVE, &wddev->status)) { |
63 | if (wddev->ops->ping) | 63 | if (wddev->ops->ping) |
64 | return wddev->ops->ping(wddev); /* ping the watchdog */ | 64 | return wddev->ops->ping(wddev); /* ping the watchdog */ |
65 | else | 65 | else |
@@ -81,12 +81,12 @@ static int watchdog_start(struct watchdog_device *wddev) | |||
81 | { | 81 | { |
82 | int err; | 82 | int err; |
83 | 83 | ||
84 | if (!test_bit(WDOG_ACTIVE, &wdd->status)) { | 84 | if (!test_bit(WDOG_ACTIVE, &wddev->status)) { |
85 | err = wddev->ops->start(wddev); | 85 | err = wddev->ops->start(wddev); |
86 | if (err < 0) | 86 | if (err < 0) |
87 | return err; | 87 | return err; |
88 | 88 | ||
89 | set_bit(WDOG_ACTIVE, &wdd->status); | 89 | set_bit(WDOG_ACTIVE, &wddev->status); |
90 | } | 90 | } |
91 | return 0; | 91 | return 0; |
92 | } | 92 | } |
@@ -105,18 +105,18 @@ static int watchdog_stop(struct watchdog_device *wddev) | |||
105 | { | 105 | { |
106 | int err = -EBUSY; | 106 | int err = -EBUSY; |
107 | 107 | ||
108 | if (test_bit(WDOG_NO_WAY_OUT, &wdd->status)) { | 108 | if (test_bit(WDOG_NO_WAY_OUT, &wddev->status)) { |
109 | pr_info("%s: nowayout prevents watchdog to be stopped!\n", | 109 | pr_info("%s: nowayout prevents watchdog to be stopped!\n", |
110 | wdd->info->identity); | 110 | wddev->info->identity); |
111 | return err; | 111 | return err; |
112 | } | 112 | } |
113 | 113 | ||
114 | if (test_bit(WDOG_ACTIVE, &wdd->status)) { | 114 | if (test_bit(WDOG_ACTIVE, &wddev->status)) { |
115 | err = wddev->ops->stop(wddev); | 115 | err = wddev->ops->stop(wddev); |
116 | if (err < 0) | 116 | if (err < 0) |
117 | return err; | 117 | return err; |
118 | 118 | ||
119 | clear_bit(WDOG_ACTIVE, &wdd->status); | 119 | clear_bit(WDOG_ACTIVE, &wddev->status); |
120 | } | 120 | } |
121 | return 0; | 121 | return 0; |
122 | } | 122 | } |