Module Name:    src
Committed By:   jmcneill
Date:           Sun Jan 27 12:48:57 UTC 2013

Modified Files:
        src/sys/dev/ic: ath.c ath_netbsd.h athvar.h

Log Message:
don't transmit while in a key change is in progress


To generate a diff of this commit:
cvs rdiff -u -r1.114 -r1.115 src/sys/dev/ic/ath.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/ic/ath_netbsd.h
cvs rdiff -u -r1.35 -r1.36 src/sys/dev/ic/athvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/ic/ath.c
diff -u src/sys/dev/ic/ath.c:1.114 src/sys/dev/ic/ath.c:1.115
--- src/sys/dev/ic/ath.c:1.114	Thu Nov  8 20:43:55 2012
+++ src/sys/dev/ic/ath.c	Sun Jan 27 12:48:56 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ath.c,v 1.114 2012/11/08 20:43:55 dyoung Exp $	*/
+/*	$NetBSD: ath.c,v 1.115 2013/01/27 12:48:56 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
@@ -41,7 +41,7 @@
 __FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.104 2005/09/16 10:09:23 ru Exp $");
 #endif
 #ifdef __NetBSD__
-__KERNEL_RCSID(0, "$NetBSD: ath.c,v 1.114 2012/11/08 20:43:55 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ath.c,v 1.115 2013/01/27 12:48:56 jmcneill Exp $");
 #endif
 
 /*
@@ -1278,6 +1278,10 @@ ath_start(struct ifnet *ifp)
 	if ((ifp->if_flags & IFF_RUNNING) == 0 ||
 	    !device_is_active(sc->sc_dev))
 		return;
+
+	if (sc->sc_flags & ATH_KEY_UPDATING)
+		return;
+
 	for (;;) {
 		/*
 		 * Grab a TX buffer and associated resources.
@@ -1887,7 +1891,7 @@ ath_key_update_begin(struct ieee80211com
 #if 0
 	tasklet_disable(&sc->sc_rxtq);
 #endif
-	IF_LOCK(&ifp->if_snd);		/* NB: doesn't block mgmt frames */
+	sc->sc_flags |= ATH_KEY_UPDATING;
 }
 
 static void
@@ -1897,7 +1901,7 @@ ath_key_update_end(struct ieee80211com *
 	struct ath_softc *sc = ifp->if_softc;
 
 	DPRINTF(sc, ATH_DEBUG_KEYCACHE, "%s:\n", __func__);
-	IF_UNLOCK(&ifp->if_snd);
+	sc->sc_flags &= ~ATH_KEY_UPDATING;
 #if 0
 	tasklet_enable(&sc->sc_rxtq);
 #endif

Index: src/sys/dev/ic/ath_netbsd.h
diff -u src/sys/dev/ic/ath_netbsd.h:1.14 src/sys/dev/ic/ath_netbsd.h:1.15
--- src/sys/dev/ic/ath_netbsd.h:1.14	Thu Nov  8 20:43:55 2012
+++ src/sys/dev/ic/ath_netbsd.h	Sun Jan 27 12:48:56 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ath_netbsd.h,v 1.14 2012/11/08 20:43:55 dyoung Exp $ */
+/*	$NetBSD: ath_netbsd.h,v 1.15 2013/01/27 12:48:56 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2003, 2004 David Young
@@ -62,9 +62,6 @@ typedef kmutex_t ath_txbuf_lock_t;
 #define	NET_LOCK_GIANT()
 #define	NET_UNLOCK_GIANT()
 
-#define	IF_LOCK(__q)
-#define	IF_UNLOCK(__q)
-
 #define	SYSCTL_INT_SUBR(__rw, __name, __descr)				     \
 	sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_PERMANENT|(__rw),     \
 	    CTLTYPE_INT, #__name, SYSCTL_DESCR(__descr), ath_sysctl_##__name,\

Index: src/sys/dev/ic/athvar.h
diff -u src/sys/dev/ic/athvar.h:1.35 src/sys/dev/ic/athvar.h:1.36
--- src/sys/dev/ic/athvar.h:1.35	Fri Oct  7 16:58:11 2011
+++ src/sys/dev/ic/athvar.h	Sun Jan 27 12:48:56 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: athvar.h,v 1.35 2011/10/07 16:58:11 dyoung Exp $	*/
+/*	$NetBSD: athvar.h,v 1.36 2013/01/27 12:48:56 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
@@ -309,6 +309,7 @@ struct ath_softc {
 #define	sc_rx_th		u_rx_rt.th
 
 #define	ATH_ATTACHED		0x0001		/* attach has succeeded */
+#define	ATH_KEY_UPDATING	0x0002		/* key change in progress */
 
 #define	ATH_TXQ_SETUP(sc, i)	((sc)->sc_txqsetup & (1<<i))
 

Reply via email to