NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/38019: some kind of undetected deadlock slowly kills NetBSD-4.0_STABLE GENERIC.MP
The following reply was made to PR kern/38019; it has been noted by GNATS.
From: "Greg A. Woods; Planix, Inc." <woods%planix.ca@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc:
Subject: Re: kern/38019: some kind of undetected deadlock slowly kills
NetBSD-4.0_STABLE GENERIC.MP
Date: Fri, 22 Feb 2008 16:15:37 -0500
Well in the way these things sometimes go, my machine has been
relatively stable since booting a kernel built with LOCKDEBUG.
Curiously though there are occasional "pauses", and some of the
former problems with processes getting stuck in vmmapva are now
eventually getting unstuck, apparently all by themselves (though
sometimes coincidentally with larger amounts of disk I/O occurring).
Also curiously I began to see the words "write", and sometimes
"rstart" and "rend" appear on the console. Finally after much
searching I found printf()s containing these very poor clues in sys/
arch/x86/x86/ipmi.c. I don't know if they're related to the hangs
and other weirdness, or not. The following patch might make them a
little less obtuse, or at least a little easier to find in the sources:
Index: sys/arch/x86/x86/ipmi.c
===================================================================
RCS file: /cvs/master/m-NetBSD/main/src/sys/arch/x86/x86/ipmi.c,v
retrieving revision 1.4.4.2
diff -u -r1.4.4.2 ipmi.c
--- sys/arch/x86/x86/ipmi.c 19 Dec 2007 19:38:52 -0000 1.4.4.2
+++ sys/arch/x86/x86/ipmi.c 21 Feb 2008 02:53:11 -0000
@@ -527,13 +527,13 @@
int v;
/* Wait for expected flag bits */
- v = bmc_io_wait(sc, _SMIC_FLAG_REG, mask, val, "smicwait");
+ v = bmc_io_wait(sc, _SMIC_FLAG_REG, mask, val, "smicwait"); /
* XXX should that be passing lbl */
if (v < 0)
return (-1);
/* Return current status */
v = bmc_read(sc, _SMIC_CTRL_REG);
- dbg_printf(99, "smic_wait = %.2x\n", v);
+ dbg_printf(99, "smic_wait = %.2x %s\n", v, lbl);
return (v);
}
@@ -581,11 +581,11 @@
int sts, idx;
sts = smic_write_cmd_data(sc, SMS_CC_START_TRANSFER, &data[0]);
- ErrStat(sts != SMS_SC_WRITE_START, "wstart");
+ ErrStat(sts != SMS_SC_WRITE_START, "smic_sendmsg: wstart\n");
for (idx = 1; idx < len - 1; idx++) {
sts = smic_write_cmd_data(sc, SMS_CC_NEXT_TRANSFER,
&data[idx]);
- ErrStat(sts != SMS_SC_WRITE_NEXT, "write");
+ ErrStat(sts != SMS_SC_WRITE_NEXT, "smic_sendmsg: write
\n");
}
sts = smic_write_cmd_data(sc, SMS_CC_END_TRANSFER, &data[idx]);
if (sts != SMS_SC_WRITE_END) {
@@ -607,14 +607,14 @@
return (-1);
sts = smic_write_cmd_data(sc, SMS_CC_START_RECEIVE, NULL);
- ErrStat(sts != SMS_SC_READ_START, "rstart");
+ ErrStat(sts != SMS_SC_READ_START, "smic_recvmsg: rstart\n");
for (idx = 0;; ) {
sts = smic_read_data(sc, &data[idx++]);
if (sts != SMS_SC_READ_START && sts !=
SMS_SC_READ_NEXT)
break;
smic_write_cmd_data(sc, SMS_CC_NEXT_RECEIVE, NULL);
}
- ErrStat(sts != SMS_SC_READ_END, "rend");
+ ErrStat(sts != SMS_SC_READ_END, "smic_recvmsg: rend\n");
*len = idx;
--
Greg A. Woods; Planix, Inc.
<woods%planix.ca@localhost>
Home |
Main Index |
Thread Index |
Old Index