[stable 9] panic on reboot: ipmi_wd_event()
John Baldwin
jhb at freebsd.org
Mon Aug 6 14:40:16 UTC 2012
On Thursday, August 02, 2012 7:01:28 pm Sean Bruno wrote:
> On Thu, 2012-08-02 at 13:34 -0700, John Baldwin wrote:
> > On Wednesday, August 01, 2012 6:48:48 pm Sean Bruno wrote:
> > > On Wed, 2012-08-01 at 05:53 -0700, John Baldwin wrote:
> > > > Index: vfs_subr.c
> > > > ===================================================================
> > > > --- vfs_subr.c (revision 238969)
> > > > +++ vfs_subr.c (working copy)
> > > > @@ -1868,8 +1868,11 @@ sched_sync(void)
> > > > continue;
> > > > }
> > > >
> > > > - if (first_printf == 0)
> > > > + if (first_printf == 0) {
> > > > + mtx_unlock(&sync_mtx);
> > > > wdog_kern_pat(WD_LASTVAL);
> > > > + mtx_lock(&sync_mtx);
> > > > + }
> > > >
> > > > }
> > > > if (!LIST_EMPTY(gslp)) {
> > > >
> > > >
> > > > --
> > > > John Baldwin
> > >
> > > This definitely makes the panic go away on reboot.
> >
> > Do you have watchdogd enabled at all?
> >
>
> No, we never had it enabled.
Ok, can you try this instead of the other patch. It makes the IPMI driver not
bother clearing the watchdog if it isn't running.
Index: dev/ipmi/ipmi.c
===================================================================
--- dev/ipmi/ipmi.c (revision 238992)
+++ dev/ipmi/ipmi.c (working copy)
@@ -653,11 +653,12 @@
if (timeout == 0)
timeout = 1;
e = ipmi_set_watchdog(sc, timeout);
- if (e == 0)
+ if (e == 0) {
*error = 0;
- else
+ sc->ipmi_watchdog_active = 1;
+ } else
(void)ipmi_set_watchdog(sc, 0);
- } else {
+ } else if (atomic_readandclear_int(&sc->ipmi_watchdog_active) != 0) {
e = ipmi_set_watchdog(sc, 0);
if (e != 0 && cmd == 0)
*error = EOPNOTSUPP;
Index: dev/ipmi/ipmivars.h
===================================================================
--- dev/ipmi/ipmivars.h (revision 238992)
+++ dev/ipmi/ipmivars.h (working copy)
@@ -105,6 +105,7 @@
struct cdev *ipmi_cdev;
TAILQ_HEAD(,ipmi_request) ipmi_pending_requests;
eventhandler_tag ipmi_watchdog_tag;
+ int ipmi_watchdog_active;
struct intr_config_hook ipmi_ich;
struct mtx ipmi_lock;
struct cv ipmi_request_added;
--
John Baldwin
More information about the freebsd-stable
mailing list