Date: Wed, 29 Aug 2012 13:36:43 +0400 From: Anton Yuzhaninov <citrin@citrin.ru> To: freebsd-stable@freebsd.org Subject: Problem with IPMI KCS driver Message-ID: <503DE2AB.6030702@citrin.ru>
next in thread | raw e-mail | index | archive | help
We use servers witch motherboard Supermicro X8DTT-H and meet with such problem: when watchdogd started, server is rebooted by IPMI watchdog several times per week. After some debugging I've found, that sometimes IPMI driver entered endless loop, and watchdogd have no chances to reset watchdog timer. In such situation top show: PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND ... 113 root -16 - 0K 16K CPU4 4 17:18 99.17% ipmi0: kcs Endless loop located in file /sys/dev/ipmi/ipmi_kcs.c and function kcs_wait_for_obf(): int status, start = ticks; status = INB(sc, KCS_CTL_STS); if (state == 0) { /* WAIT FOR OBF = 0 */ while (ticks - start < MAX_TIMEOUT && status & KCS_STATUS_OBF) { DELAY(100); status = INB(sc, KCS_CTL_STS); } } else { /* WAIT FOR OBF = 1 */ while (ticks - start < MAX_TIMEOUT && !(status & KCS_STATUS_OBF)) { DELAY(100); status = INB(sc, KCS_CTL_STS); } } It seems to be, that this loop intended to run no more than MAX_TIMEOUT ticks. but by some reason this timeout does not works and loop runs until reboot. Questions: 1. Is it correct to check ticks to implement timeout here? 2. how to fix this timeout? -- Anton Yuzhaninov
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?503DE2AB.6030702>