From: Greg Kroah-Hartman Date: Thu, 12 Oct 2017 11:58:02 +0000 (+0200) Subject: 4.13-stable patches X-Git-Tag: v4.13.7~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f9d8712025601dc9f162dc83233b0b41de3c7dc0;p=thirdparty%2Fkernel%2Fstable-queue.git 4.13-stable patches added patches: watchdog-revert-itco_wdt-all-versions-count-down-twice.patch --- diff --git a/queue-4.13/watchdog-revert-itco_wdt-all-versions-count-down-twice.patch b/queue-4.13/watchdog-revert-itco_wdt-all-versions-count-down-twice.patch new file mode 100644 index 00000000000..503bc42c136 --- /dev/null +++ b/queue-4.13/watchdog-revert-itco_wdt-all-versions-count-down-twice.patch @@ -0,0 +1,81 @@ +From fc61e83a29308601e6e8a0759e24fc8fe2122692 Mon Sep 17 00:00:00 2001 +From: Wim Van Sebroeck +Date: Sat, 9 Sep 2017 17:41:24 +0200 +Subject: watchdog: Revert "iTCO_wdt: all versions count down twice" + +From: Wim Van Sebroeck + +commit fc61e83a29308601e6e8a0759e24fc8fe2122692 upstream. + +This reverts commit 1fccb73011ea8a5fa0c6d357c33fa29c695139ea. +Reported as Bug 196509 - iTCO_wdt regression reboot before timeout expire + +Signed-off-by: Wim Van Sebroeck +Cc: Martin Wilck +Cc: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman + +--- + Documentation/watchdog/watchdog-parameters.txt | 2 +- + drivers/watchdog/iTCO_wdt.c | 22 ++++++++++++---------- + 2 files changed, 13 insertions(+), 11 deletions(-) + +--- a/Documentation/watchdog/watchdog-parameters.txt ++++ b/Documentation/watchdog/watchdog-parameters.txt +@@ -117,7 +117,7 @@ nowayout: Watchdog cannot be stopped onc + ------------------------------------------------- + iTCO_wdt: + heartbeat: Watchdog heartbeat in seconds. +- (5<=heartbeat<=74 (TCO v1) or 1226 (TCO v2), default=30) ++ (2smi_res, wd_dev->timeout); + +- /* Reset the timeout status bit so that the timer +- * needs to count down twice again before rebooting */ +- outw(0x0008, TCO1_STS(p)); /* write 1 to clear bit */ +- + /* Reload the timer by writing to the TCO Timer Counter register */ +- if (p->iTCO_version >= 2) ++ if (p->iTCO_version >= 2) { + outw(0x01, TCO_RLD(p)); +- else if (p->iTCO_version == 1) ++ } else if (p->iTCO_version == 1) { ++ /* Reset the timeout status bit so that the timer ++ * needs to count down twice again before rebooting */ ++ outw(0x0008, TCO1_STS(p)); /* write 1 to clear bit */ ++ + outb(0x01, TCO_RLD(p)); ++ } + + spin_unlock(&p->io_lock); + return 0; +@@ -327,8 +328,11 @@ static int iTCO_wdt_set_timeout(struct w + unsigned char val8; + unsigned int tmrval; + +- /* The timer counts down twice before rebooting */ +- tmrval = seconds_to_ticks(p, t) / 2; ++ tmrval = seconds_to_ticks(p, t); ++ ++ /* For TCO v1 the timer counts down twice before rebooting */ ++ if (p->iTCO_version == 1) ++ tmrval /= 2; + + /* from the specs: */ + /* "Values of 0h-3h are ignored and should not be attempted" */ +@@ -381,8 +385,6 @@ static unsigned int iTCO_wdt_get_timelef + spin_lock(&p->io_lock); + val16 = inw(TCO_RLD(p)); + val16 &= 0x3ff; +- if (!(inw(TCO1_STS(p)) & 0x0008)) +- val16 += (inw(TCOv2_TMR(p)) & 0x3ff); + spin_unlock(&p->io_lock); + + time_left = ticks_to_seconds(p, val16);