Date: Sun, 8 Sep 2013 09:37:11 GMT From: ccqin@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257107 - in soc2013/ccqin/head/sys: dev/ath net80211 Message-ID: <201309080937.r889bBT6086519@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ccqin Date: Sun Sep 8 09:37:11 2013 New Revision: 257107 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257107 Log: fix ratectl mbuf tag stuffs, add some debug msgs. * for __complete__ that without ratectl mbuf tag, feed a tmp ieee80211_rc_info. * for reassoc node, init the ratectl node only when it's a new assoc. * print the rc_flags of rc series after complete_rc_flags. 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_amrr.c soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c Modified: soc2013/ccqin/head/sys/dev/ath/if_ath.c ============================================================================== --- soc2013/ccqin/head/sys/dev/ath/if_ath.c Sat Sep 7 22:40:32 2013 (r257106) +++ soc2013/ccqin/head/sys/dev/ath/if_ath.c Sun Sep 8 09:37:11 2013 (r257107) @@ -324,6 +324,7 @@ sc->sc_ah = ah; sc->sc_invalid = 0; /* ready to go, enable interrupt handling */ #ifdef ATH_DEBUG + ath_debug |= ATH_DEBUG_NODE; sc->sc_debug = ath_debug; #endif @@ -4089,19 +4090,27 @@ 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) { - rc_info = (struct ieee80211_rc_info*)(mtag + 1); - 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); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else + /* 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: can't locate mbuf tag for ratectl.\n", __func__); + "%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); + } + + 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); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); } ath_tx_default_comp(sc, bf, 0); } else @@ -5607,7 +5616,11 @@ #if 0 ath_rate_newassoc(sc, an, isnew); #endif - ieee80211_ratectl_node_init(ni); + + DPRINTF(sc, ATH_DEBUG_NODE, "%s: newassoc is new: %d\n", + __func__, isnew); + if (isnew) + ieee80211_ratectl_node_init(ni); if (isnew && (vap->iv_flags & IEEE80211_F_PRIVACY) == 0 && sc->sc_hasclrkey && Modified: soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c ============================================================================== --- soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c Sat Sep 7 22:40:32 2013 (r257106) +++ soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c Sun Sep 8 09:37:11 2013 (r257107) @@ -1420,13 +1420,15 @@ /* 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) - return; - IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't alloc mbuf tag for ratectl.\n", __func__); + 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__); @@ -4152,19 +4154,28 @@ ts, 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) { - rc_info = (struct ieee80211_rc_info*)(mtag + 1); - 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); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else + + /* 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: can't locate mbuf tag for ratectl.\n", __func__); + "%s: found ratectl mbuf tag.\n", __func__); + rc_info = (struct ieee80211_rc_info*)(mtag + 1); + } + + 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); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); } ath_tx_default_comp(sc, bf, fail); @@ -4549,23 +4560,29 @@ 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) { - rc_info = (struct ieee80211_rc_info*)(mtag + 1); - ieee80211_ratectl_rc_info_set(rc_info, - bf_first->bf_state.bfs_nframes, - bf_first->bf_state.bfs_nframes, - bf_first->bf_state.bfs_pktlen, - ts.ts_shortretry, ts.ts_longretry, - ts.ts_finaltsi, ts.ts_rate); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else + if (NULL == mtag) { IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't locate mbuf tag for ratectl.\n", __func__); - + "%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); + } + + ieee80211_ratectl_rc_info_set(rc_info, + bf_first->bf_state.bfs_nframes, + bf_first->bf_state.bfs_nframes, + bf_first->bf_state.bfs_pktlen, + ts.ts_shortretry, ts.ts_longretry, + ts.ts_finaltsi, ts.ts_rate); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); + ATH_TX_LOCK(sc); tap = ath_tx_get_tx_tid(an, tid->tid); sc->sc_stats.ast_tx_aggr_failall++; @@ -4843,7 +4860,7 @@ */ mtag = m_tag_locate(bf_first->bf_m, MTAG_ABI_NET80211, NET80211_TAG_RATECTL, NULL); - + DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR, "%s: txa_start=%d, tx_ok=%d, status=%.8x, flags=%.8x, " "isaggr=%d, seq_st=%d, hasba=%d, ba=%.8x, %.8x\n", @@ -4965,16 +4982,24 @@ ath_tx_update_ratectrl(sc, ni, rc, &ts, pktlen, nframes, nbad); #endif - if (NULL != mtag) { + /* 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); - ieee80211_ratectl_rc_info_set(rc_info, + } + + ieee80211_ratectl_rc_info_set(rc_info, nframes, nbad, pktlen, ts.ts_shortretry, ts.ts_longretry, ts.ts_finaltsi, ts.ts_rate); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else - IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't locate mbuf tag for ratectl.\n", __func__); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); } /* @@ -5075,17 +5100,24 @@ mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, NET80211_TAG_RATECTL, NULL); - if (NULL != mtag) { - rc_info = (struct ieee80211_rc_info*)(mtag + 1); - 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); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else + if (NULL == mtag) { IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't locate mbuf tag for ratectl.\n", __func__); + "%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); + } + + 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); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); } /* * This is called early so atid->hwq_depth can be tracked. Modified: soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c ============================================================================== --- soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c Sat Sep 7 22:40:32 2013 (r257106) +++ soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c Sun Sep 8 09:37:11 2013 (r257107) @@ -315,7 +315,10 @@ rs = ieee80211_ratectl_get_rateset(ni); rt = ieee80211_get_ratetable(ni->ni_ic->ic_curchan); - + IEEE80211_DPRINTF(ni->ni_vap, IEEE80211_MSG_RATECTL, + "%s: channel flags: 0x%08x\n", __func__, + ni->ni_ic->ic_curchan->ic_flags); + rix = amrr_rate(ni, NULL, 0); rc[0].flags = rc[1].flags = rc[2].flags = rc[3].flags = 0; Modified: soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c ============================================================================== --- soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c Sat Sep 7 22:40:32 2013 (r257106) +++ soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c Sun Sep 8 09:37:11 2013 (r257107) @@ -229,5 +229,9 @@ rc[i].tx_power_cap = ieee80211_get_node_txpower(ni); } + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "%s: flags: rc[0]:0x%08x, rc[1]:0x%08x, " + "rc[2]:0x%08x, rc[3]:0x%08x\n", __func__, + rc[0].flags, rc[1].flags, rc[2].flags, rc[3].flags); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309080937.r889bBT6086519>