socsvn commit: r257356 - in soc2013/ccqin/head/sys: dev/ath net80211

ccqin at FreeBSD.org ccqin at FreeBSD.org
Sun Sep 15 03:47:08 UTC 2013


Author: ccqin
Date: Sun Sep 15 03:47:06 2013
New Revision: 257356
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257356

Log:
  Add ieee80211_ratectl_rc_info_get() to get the ieee80211_rc_info. If can be
  located in an mbuf, then use it; otherwise alloc a new one, zero it and
  attach it.
  * modify ath to use it.
  

Modified:
  soc2013/ccqin/head/sys/dev/ath/if_ath.c
  soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c
  soc2013/ccqin/head/sys/net80211/ieee80211_node.c
  soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.h

Modified: soc2013/ccqin/head/sys/dev/ath/if_ath.c
==============================================================================
--- soc2013/ccqin/head/sys/dev/ath/if_ath.c	Sun Sep 15 01:44:07 2013	(r257355)
+++ soc2013/ccqin/head/sys/dev/ath/if_ath.c	Sun Sep 15 03:47:06 2013	(r257356)
@@ -4057,7 +4057,6 @@
 	struct ieee80211_node *ni = bf->bf_node;
 	struct ath_node *an = NULL;
 	struct ieee80211_rc_info *rc_info = NULL;
-	struct m_tag *mtag;
 
 	ATH_TX_UNLOCK_ASSERT(sc);
 	ATH_TXQ_UNLOCK_ASSERT(txq);
@@ -4091,20 +4090,7 @@
 			    (ts->ts_status == 0 ? 0 : 1));
 #endif
 			/* net80211 ratectl */
-		    mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, 
-				            NET80211_TAG_RATECTL, NULL);
-			if (NULL == mtag) {
-				IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-						"%s: no ratectl mbuf tag found.\n", __func__);
-				struct ieee80211_rc_info tmp_rc_info;
-				rc_info = &tmp_rc_info;
-				bzero(rc_info, sizeof(rc_info));
-			} else {
-				IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-						"%s: found ratectl mbuf tag.\n", __func__);
-				rc_info = (struct ieee80211_rc_info*)(mtag + 1);
-			}
-	
+			rc_info = ieee80211_ratectl_rc_info_get(ni, bf->bf_m);
 			ieee80211_ratectl_rc_info_set(rc_info,
 					1, (ts->ts_status == 0 ? 0 : 1), 
 					bf->bf_state.bfs_pktlen,

Modified: soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c
==============================================================================
--- soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c	Sun Sep 15 01:44:07 2013	(r257355)
+++ soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c	Sun Sep 15 03:47:06 2013	(r257356)
@@ -1392,7 +1392,6 @@
 	struct ieee80211_node *ni = bf->bf_node;
 	struct ieee80211_rc_info *rc_info = NULL;
 	struct ieee80211_rc_series *rc = NULL;
-	struct m_tag *mtag;
 	uint8_t rate, rix;
 	int try0;
 
@@ -1418,37 +1417,18 @@
 #endif
 
 	/* net80211 ratectl */
-	mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, 
-			NET80211_TAG_RATECTL, NULL);
-again:	
-	if (NULL == mtag) {
-		mtag = m_tag_alloc(MTAG_ABI_NET80211, NET80211_TAG_RATECTL,
-				sizeof(struct ieee80211_rc_info), M_NOWAIT);
-		if (NULL == mtag) {
-			IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-					"%s: can't alloc mbuf tag for ratectl.\n", __func__);
-			goto again;
-		}
-	} else
-		IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-				"%s: nani? find mbuf tag for ratectl directly.\n", __func__);
-	
-	rc_info = (struct ieee80211_rc_info*)(mtag + 1);
+	rc_info = ieee80211_ratectl_rc_info_get(ni, bf->bf_m);
 	rc = rc_info->iri_rc;
 	
-	bzero(rc_info, sizeof(rc_info));
-
+	rc_info->iri_flags = 0;
 	if (bf->bf_state.bfs_shpream)
 		rc_info->iri_flags |= IEEE80211_RATECTL_INFO_SP;
 	if (bf->bf_state.bfs_aggr)
 		rc_info->iri_flags |= IEEE80211_RATECTL_INFO_AGGR;
-
 	rc_info->iri_framelen = bf->bf_state.bfs_pktlen;
 
 	ieee80211_ratectl_rates(ni, rc_info);
 
-	m_tag_prepend(bf->bf_m, mtag);
-
 	rix = rc[0].rix;
 	try0 = rc[0].tries;
 	rate = ni->ni_txrate;
@@ -4103,7 +4083,6 @@
 	struct ath_tid *atid = &an->an_tid[tid];
 	struct ath_tx_status *ts = &bf->bf_status.ds_txstat;
 	struct ieee80211_rc_info *rc_info = NULL;
-	struct m_tag *mtag;
 
 	/* The TID state is protected behind the TXQ lock */
 	ATH_TX_LOCK(sc);
@@ -4162,25 +4141,13 @@
 #endif
 	
 		/* net80211 ratectl */
-	    mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, 
-			            NET80211_TAG_RATECTL, NULL);
-		if (NULL == mtag) {
-			IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-					"%s: no ratectl mbuf tag found.\n", __func__);
-			struct ieee80211_rc_info tmp_rc_info;
-			rc_info = &tmp_rc_info;
-			bzero(rc_info, sizeof(rc_info));
-		} else {
-			IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-					"%s: found ratectl mbuf tag.\n", __func__);
-			rc_info = (struct ieee80211_rc_info*)(mtag + 1);
-		}
-		rc_info->iri_flags &= ~IEEE80211_RATECTL_INFO_AGGR;	
+		rc_info = ieee80211_ratectl_rc_info_get(ni, bf->bf_m);
 		ieee80211_ratectl_rc_info_set(rc_info,
 				1, (ts->ts_status == 0 ? 0 : 1), 
 				bf->bf_state.bfs_pktlen,
 				ts->ts_shortretry, ts->ts_longretry,
 				ts->ts_finaltsi, ts->ts_rate);
+		rc_info->iri_flags &= ~IEEE80211_RATECTL_INFO_AGGR;	
 		ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info);
 	}
 
@@ -4549,7 +4516,6 @@
 	ath_bufhead bf_cq;
 	struct ath_tx_status ts = bf_first->bf_status.ds_txstat;
 	struct ieee80211_rc_info *rc_info = NULL;
-	struct m_tag *mtag;
 
 	TAILQ_INIT(&bf_q);
 	TAILQ_INIT(&bf_cq);
@@ -4566,21 +4532,9 @@
 	    bf_first->bf_state.bfs_pktlen,
 	    bf_first->bf_state.bfs_nframes, bf_first->bf_state.bfs_nframes);
 #endif
+	
 	/* net80211 ratectl */
-	mtag = m_tag_locate(bf_first->bf_m, MTAG_ABI_NET80211, 
-			NET80211_TAG_RATECTL, NULL);
-	if (NULL == mtag) {
-		IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-				"%s: no ratectl mbuf tag found.\n", __func__);
-		struct ieee80211_rc_info tmp_rc_info;
-		rc_info = &tmp_rc_info;
-		bzero(rc_info, sizeof(rc_info));
-	} else {
-		IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-				"%s: found ratectl mbuf tag.\n", __func__);
-		rc_info = (struct ieee80211_rc_info*)(mtag + 1);
-	}
-
+	rc_info = ieee80211_ratectl_rc_info_get(ni, bf_first->bf_m);
 	ieee80211_ratectl_rc_info_set(rc_info,
 			bf_first->bf_state.bfs_nframes, 
 			bf_first->bf_state.bfs_nframes,
@@ -4731,8 +4685,7 @@
 #endif
 	int txseq;
 	struct ieee80211_rc_info *rc_info = NULL;
-	struct m_tag *mtag;
-
+	struct mbuf *m;
 	DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR, "%s: called; hwq_depth=%d\n",
 	    __func__, atid->hwq_depth);
 
@@ -4862,11 +4815,9 @@
 	memcpy(rc, bf_first->bf_state.bfs_rc, sizeof(rc));
 #endif
 	/* 
-	 * Get the net80211 ratectl mtag here, as bf_first will 
-	 * be set to NULL later. 
+	 * Get the mbuf here, as bf_first will be set to NULL later. 
 	 */
-	mtag = m_tag_locate(bf_first->bf_m, MTAG_ABI_NET80211, 
-			NET80211_TAG_RATECTL, NULL);
+	m = bf_first->bf_m; 
 
 	DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR,
 	    "%s: txa_start=%d, tx_ok=%d, status=%.8x, flags=%.8x, "
@@ -4990,23 +4941,12 @@
 		    nbad);
 #endif
 		/* net80211 ratectl */
-		if (NULL == mtag) {
-			IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-					"%s: no ratectl mbuf tag found.\n", __func__);
-			struct ieee80211_rc_info tmp_rc_info;
-			rc_info = &tmp_rc_info;
-			bzero(rc_info, sizeof(rc_info));
-		} else {
-			IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-					"%s: found ratectl mbuf tag.\n", __func__);
-			rc_info = (struct ieee80211_rc_info*)(mtag + 1);
-		}
-
-		rc_info->iri_flags |= IEEE80211_RATECTL_INFO_AGGR;
+		rc_info = ieee80211_ratectl_rc_info_get(ni, m);
 		ieee80211_ratectl_rc_info_set(rc_info,
 					nframes, nbad, pktlen,
 					ts.ts_shortretry, ts.ts_longretry,
 					ts.ts_finaltsi, ts.ts_rate);
+		rc_info->iri_flags |= IEEE80211_RATECTL_INFO_AGGR;
 		ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info);
 	}
 
@@ -5083,7 +5023,6 @@
 	struct ath_tx_status ts;
 	int drops = 0;
 	struct ieee80211_rc_info *rc_info = NULL;
-	struct m_tag *mtag;
 
 	/*
 	 * Take a copy of this; filtering/cloning the frame may free the
@@ -5105,27 +5044,13 @@
 		    bf->bf_state.bfs_pktlen,
 		    1, (ts.ts_status == 0) ? 0 : 1);
 #endif
-		mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, 
-				NET80211_TAG_RATECTL, NULL);
-		
-		if (NULL == mtag) {
-			IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-					"%s: no ratectl mbuf tag found.\n", __func__);
-			struct ieee80211_rc_info tmp_rc_info;
-			rc_info = &tmp_rc_info;
-			bzero(rc_info, sizeof(rc_info));
-		} else {
-			IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
-					"%s: found ratectl mbuf tag.\n", __func__);
-			rc_info = (struct ieee80211_rc_info*)(mtag + 1);
-		}
-
-		rc_info->iri_flags &= ~IEEE80211_RATECTL_INFO_AGGR;
+		rc_info = ieee80211_ratectl_rc_info_get(ni, bf->bf_m);
 		ieee80211_ratectl_rc_info_set(rc_info,
 				1, (ts.ts_status == 0 ? 0 : 1), 
 				bf->bf_state.bfs_pktlen,
 				ts.ts_shortretry, ts.ts_longretry,
 				ts.ts_finaltsi, ts.ts_rate);
+		rc_info->iri_flags &= ~IEEE80211_RATECTL_INFO_AGGR;
 		ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info);
 	}
 	/*

Modified: soc2013/ccqin/head/sys/net80211/ieee80211_node.c
==============================================================================
--- soc2013/ccqin/head/sys/net80211/ieee80211_node.c	Sun Sep 15 01:44:07 2013	(r257355)
+++ soc2013/ccqin/head/sys/net80211/ieee80211_node.c	Sun Sep 15 03:47:06 2013	(r257356)
@@ -1074,8 +1074,6 @@
 	ieee80211_ies_cleanup(&ni->ni_ies);
 	ieee80211_psq_cleanup(&ni->ni_psq);
 	free(ni, M_80211_NODE);
-	IEEE80211_DPRINTF(ni->ni_vap, IEEE80211_MSG_RATECTL,
-			"%s: after free(ni, M_80211_NODE).\n", __func__);
 }
 
 static void
@@ -1735,7 +1733,7 @@
 	 * to use ni_ic below to reclaim resources.
 	 */
 #if 0
-	IEEE80211_DPRINTF(ni->ni_vap, IEEE80211_MSG_NODE,
+	IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
 		"%s %p<%s> in %s table\n", __func__, ni,
 		ether_sprintf(ni->ni_macaddr),
 		nt != NULL ? nt->nt_name : "<gone>");

Modified: soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.h
==============================================================================
--- soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.h	Sun Sep 15 01:44:07 2013	(r257355)
+++ soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.h	Sun Sep 15 03:47:06 2013	(r257356)
@@ -329,4 +329,31 @@
 	rc_info->iri_txrate = txrate;
 }
 
+__inline static struct ieee80211_rc_info *
+ieee80211_ratectl_rc_info_get(struct ieee80211_node *ni,
+		struct mbuf *m)
+{
+	struct m_tag *mtag;
+
+    mtag = m_tag_locate(m, MTAG_ABI_NET80211, 
+			NET80211_TAG_RATECTL, NULL);
+
+	IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
+			"%s: %sratectl mbuf tag found.\n", __func__, 
+			(NULL == mtag? "no ":""));
+again:
+	if (NULL == mtag) {
+		mtag = m_tag_alloc(MTAG_ABI_NET80211, NET80211_TAG_RATECTL,
+				sizeof(struct ieee80211_rc_info), M_NOWAIT);
+		if (NULL == mtag) {
+			IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
+					"%s: can't alloc mbuf tag for ratectl.\n", __func__);
+			goto again;
+		}
+		bzero(mtag + 1, mtag->m_tag_len);
+		m_tag_prepend(m, mtag);
+	}
+	return (struct ieee80211_rc_info*)(mtag + 1);
+}
+
 #endif


More information about the svn-soc-all mailing list