aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2021-09-15 01:06:39 +0000
committerAlexander Motin <mav@FreeBSD.org>2021-09-15 01:06:39 +0000
commit6c2d4404161aa2bac1c7992afbf5a763f1a6f66e (patch)
tree32ef504de79e03dbefffb41d48ff49932d38722e
parent02d8194012a9a0e367a92c7f89567b808bf0e9a8 (diff)
downloadsrc-6c2d4404161aa2bac1c7992afbf5a763f1a6f66e.tar.gz
src-6c2d4404161aa2bac1c7992afbf5a763f1a6f66e.zip
ipmi(4): Limit maximum watchdog pre-timeout interval.
Previous code by default setting pre-timeout interval to 120 seconds made impossible to set timeout interval below that, resulting in error 0xcc (Invalid data field in Request) at least on Supermicro boards. To fix that limit maximum pre-timeout interval to ~1/4 of the timeout interval, that sounds like a reasonable default: not too short to fire too late, but also not too long to give many false reports. MFC after: 2 weeks
-rw-r--r--sys/dev/ipmi/ipmi.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/dev/ipmi/ipmi.c b/sys/dev/ipmi/ipmi.c
index 77baf652b4bc..a8f3e7f1be10 100644
--- a/sys/dev/ipmi/ipmi.c
+++ b/sys/dev/ipmi/ipmi.c
@@ -668,7 +668,8 @@ ipmi_set_watchdog(struct ipmi_softc *sc, unsigned int sec)
req->ir_request[0] = IPMI_SET_WD_TIMER_DONT_STOP
| IPMI_SET_WD_TIMER_SMS_OS;
req->ir_request[1] = (wd_timer_actions & 0xff);
- req->ir_request[2] = (wd_pretimeout_countdown & 0xff);
+ req->ir_request[2] = min(0xff,
+ min(wd_pretimeout_countdown, (sec + 2) / 4));
req->ir_request[3] = 0; /* Timer use */
req->ir_request[4] = (sec * 10) & 0xff;
req->ir_request[5] = (sec * 10) >> 8;