Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Aug 2012 10:38:20 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Sean Bruno <seanbru@yahoo-inc.com>
Cc:        "attilio@freebsd.org" <attilio@freebsd.org>, "freebsd-stable@freebsd.org" <freebsd-stable@freebsd.org>
Subject:   Re: [stable 9] panic on reboot: ipmi_wd_event()
Message-ID:  <201208061038.20056.jhb@freebsd.org>
In-Reply-To: <1343948488.2838.0.camel@powernoodle.corp.yahoo.com>
References:  <1342742294.2656.24.camel@powernoodle.corp.yahoo.com> <201208021634.20529.jhb@freebsd.org> <1343948488.2838.0.camel@powernoodle.corp.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201208061038.20056.jhb>