Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Aug 2014 03:51:34 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r269458 - head/sys/dev/iwn
Message-ID:  <201408030351.s733pYkH067039@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Sun Aug  3 03:51:33 2014
New Revision: 269458
URL: http://svnweb.freebsd.org/changeset/base/269458

Log:
  Do the iwn(4) panic reinitialisation under IWN_LOCK().
  
  I've checked each of the functions being called and there's either a
  _locked version or it's supposed to be called with IWN_LOCK() held.

Modified:
  head/sys/dev/iwn/if_iwn.c

Modified: head/sys/dev/iwn/if_iwn.c
==============================================================================
--- head/sys/dev/iwn/if_iwn.c	Sun Aug  3 03:27:54 2014	(r269457)
+++ head/sys/dev/iwn/if_iwn.c	Sun Aug  3 03:51:33 2014	(r269458)
@@ -8465,9 +8465,10 @@ iwn_panicked(void *arg0, int pending)
 	device_printf(sc->sc_dev, "%s: controller panicked, iv_state = %d; "
 	    "resetting...\n", __func__, vap->iv_state);
 
-	iwn_stop(sc);
-	iwn_init(sc);
-	iwn_start(sc->sc_ifp);
+	IWN_LOCK(sc);
+
+	iwn_stop_locked(sc);
+	iwn_init_locked(sc);
 	if (vap->iv_state >= IEEE80211_S_AUTH &&
 	    (error = iwn_auth(sc, vap)) != 0) {
 		device_printf(sc->sc_dev,
@@ -8478,6 +8479,11 @@ iwn_panicked(void *arg0, int pending)
 		device_printf(sc->sc_dev,
 		    "%s: could not move to run state\n", __func__);
 	}
+
+	/* Only run start once the NIC is in a useful state, like associated */
+	iwn_start_locked(sc->sc_ifp);
+
+	IWN_UNLOCK(sc);
 }
 
 static void



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