diff for duplicates of <4F4F60A0.5040006@qca.qualcomm.com> diff --git a/a/1.txt b/N1/1.txt index d488827..01e0870 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -99,10 +99,3 @@ also analyze if this can be done in a better way or any flaws in it -- thanks, shafi --------------- next part -------------- -A non-text attachment was scrubbed... -Name: use-mac80211-api-freeing-skb.patch -Type: text/x-patch -Size: 2865 bytes -Desc: not available -Url : http://lists.ath9k.org/pipermail/ath9k-devel/attachments/20120301/ddeb851f/attachment.bin diff --git a/N1/2.hdr b/N1/2.hdr new file mode 100644 index 0000000..affeb36 --- /dev/null +++ b/N1/2.hdr @@ -0,0 +1,4 @@ +Content-Type: text/x-patch; name="use-mac80211-api-freeing-skb.patch" +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; + filename="use-mac80211-api-freeing-skb.patch" diff --git a/N1/2.txt b/N1/2.txt new file mode 100644 index 0000000..d7a6d7c --- /dev/null +++ b/N1/2.txt @@ -0,0 +1,91 @@ +diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c +index 02e95c8..1a37a43 100644 +--- a/drivers/net/wireless/ath/ath9k/main.c ++++ b/drivers/net/wireless/ath/ath9k/main.c +@@ -1148,7 +1148,7 @@ static void ath9k_tx(struct ieee80211_hw *hw, struct sk_buff *skb) + + return; + exit: +- dev_kfree_skb_any(skb); ++ ieee80211_free_txskb(sc->hw, skb); + } + + static void ath9k_stop(struct ieee80211_hw *hw) +diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c +index 5dd27d2..699086c 100644 +--- a/drivers/net/wireless/ath/ath9k/xmit.c ++++ b/drivers/net/wireless/ath/ath9k/xmit.c +@@ -811,7 +811,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc, + fi = get_frame_info(skb); + bf = fi->bf; + if (!fi->bf) +- bf = ath_tx_setup_buffer(sc, txq, tid, skb); ++ bf = ath_tx_setup_buffer(sc, txq, tid, skb, false); + + if (!bf) + continue; +@@ -1728,7 +1728,7 @@ static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid, + return; + } + +- bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb); ++ bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, false); + if (!bf) + return; + +@@ -1752,10 +1752,12 @@ static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq, + struct ath_frame_info *fi = get_frame_info(skb); + struct list_head bf_head; + struct ath_buf *bf; ++ bool is_paprd = false; + + bf = fi->bf; ++ + if (!bf) +- bf = ath_tx_setup_buffer(sc, txq, tid, skb); ++ bf = ath_tx_setup_buffer(sc, txq, tid, skb, false); + + if (!bf) + return; +@@ -1816,7 +1818,8 @@ u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate) + static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, + struct ath_txq *txq, + struct ath_atx_tid *tid, +- struct sk_buff *skb) ++ struct sk_buff *skb, ++ bool is_paprd) + { + struct ath_common *common = ath9k_hw_common(sc->sc_ah); + struct ath_frame_info *fi = get_frame_info(skb); +@@ -1857,7 +1860,11 @@ static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, + return bf; + + error: +- dev_kfree_skb_any(skb); ++ if (is_paprd) ++ dev_kfree_skb_any(skb); ++ else ++ ieee80211_free_txskb(sc->hw, skb); ++ + return NULL; + } + +@@ -1870,6 +1877,7 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb, + struct ath_atx_tid *tid = NULL; + struct ath_buf *bf; + u8 tidno; ++ bool is_paprd = false; + + if ((sc->sc_flags & SC_OP_TXAGGR) && txctl->an && + ieee80211_is_data_qos(hdr->frame_control)) { +@@ -1887,7 +1895,10 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb, + */ + ath_tx_send_ampdu(sc, tid, skb, txctl); + } else { +- bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb); ++ if (txctl->paprd) ++ is_paprd = true; ++ ++ bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, is_paprd); + if (!bf) + return; diff --git a/a/content_digest b/N1/content_digest index f2f0bd8..74c7b43 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,10 +1,18 @@ "ref\0d053a9a1ec34c2e1b15cf50b272ba7863fb17088.1330360738.git.chunkeey@googlemail.com\0" "ref\04F4F0B83.9050203@qca.qualcomm.com\0" "From\0Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>\0" - "Subject\0[ath9k-devel] [RFC 1/2] ath9k: use ieee80211_free_txskb\0" + "Subject\0Re: [RFC 1/2] ath9k: use ieee80211_free_txskb\0" "Date\0Thu, 1 Mar 2012 17:12:24 +0530\0" - "To\0ath9k-devel@lists.ath9k.org\0" - "\00:1\0" + "To\0Christian Lamparter <chunkeey@googlemail.com>\0" + "Cc\0<linux-wireless@vger.kernel.org>" + <ath9k-devel@lists.ath9k.org> + <senthilb@qca.qualcomm.com> + <vthiagar@qca.qualcomm.com> + <rodrigue@qca.qualcomm.com> + Rajkumar_contact <rmanohar@qca.qualcomm.com> + Manoharan + " Sujith <c_manoha@qca.qualcomm.com>\0" + "\01:1\0" "b\0" "On Thursday 01 March 2012 11:09 AM, Mohammed Shafi Shajakhan wrote:\n" "> Hi Christian,\n" @@ -106,13 +114,100 @@ "\n" "-- \n" "thanks,\n" - "shafi\n" - "-------------- next part --------------\n" - "A non-text attachment was scrubbed...\n" - "Name: use-mac80211-api-freeing-skb.patch\n" - "Type: text/x-patch\n" - "Size: 2865 bytes\n" - "Desc: not available\n" - Url : http://lists.ath9k.org/pipermail/ath9k-devel/attachments/20120301/ddeb851f/attachment.bin + shafi + "\01:2\0" + "fn\0use-mac80211-api-freeing-skb.patch\0" + "b\0" + "diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c\n" + "index 02e95c8..1a37a43 100644\n" + "--- a/drivers/net/wireless/ath/ath9k/main.c\n" + "+++ b/drivers/net/wireless/ath/ath9k/main.c\n" + "@@ -1148,7 +1148,7 @@ static void ath9k_tx(struct ieee80211_hw *hw, struct sk_buff *skb)\n" + " \n" + " \treturn;\n" + " exit:\n" + "-\tdev_kfree_skb_any(skb);\n" + "+\tieee80211_free_txskb(sc->hw, skb);\n" + " }\n" + " \n" + " static void ath9k_stop(struct ieee80211_hw *hw)\n" + "diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c\n" + "index 5dd27d2..699086c 100644\n" + "--- a/drivers/net/wireless/ath/ath9k/xmit.c\n" + "+++ b/drivers/net/wireless/ath/ath9k/xmit.c\n" + "@@ -811,7 +811,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc,\n" + " \t\tfi = get_frame_info(skb);\n" + " \t\tbf = fi->bf;\n" + " \t\tif (!fi->bf)\n" + "-\t\t\tbf = ath_tx_setup_buffer(sc, txq, tid, skb);\n" + "+\t\t\tbf = ath_tx_setup_buffer(sc, txq, tid, skb, false);\n" + " \n" + " \t\tif (!bf)\n" + " \t\t\tcontinue;\n" + "@@ -1728,7 +1728,7 @@ static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid,\n" + " \t\treturn;\n" + " \t}\n" + " \n" + "-\tbf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb);\n" + "+\tbf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, false);\n" + " \tif (!bf)\n" + " \t\treturn;\n" + " \n" + "@@ -1752,10 +1752,12 @@ static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq,\n" + " \tstruct ath_frame_info *fi = get_frame_info(skb);\n" + " \tstruct list_head bf_head;\n" + " \tstruct ath_buf *bf;\n" + "+\tbool is_paprd = false;\n" + " \n" + " \tbf = fi->bf;\n" + "+\n" + " \tif (!bf)\n" + "-\t\tbf = ath_tx_setup_buffer(sc, txq, tid, skb);\n" + "+\t\tbf = ath_tx_setup_buffer(sc, txq, tid, skb, false);\n" + " \n" + " \tif (!bf)\n" + " \t\treturn;\n" + "@@ -1816,7 +1818,8 @@ u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate)\n" + " static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc,\n" + " \t\t\t\t\t struct ath_txq *txq,\n" + " \t\t\t\t\t struct ath_atx_tid *tid,\n" + "-\t\t\t\t\t struct sk_buff *skb)\n" + "+\t\t\t\t\t struct sk_buff *skb,\n" + "+\t\t\t\t\t bool is_paprd)\n" + " {\n" + " \tstruct ath_common *common = ath9k_hw_common(sc->sc_ah);\n" + " \tstruct ath_frame_info *fi = get_frame_info(skb);\n" + "@@ -1857,7 +1860,11 @@ static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc,\n" + " \treturn bf;\n" + " \n" + " error:\n" + "-\tdev_kfree_skb_any(skb);\n" + "+\tif (is_paprd)\n" + "+\t\tdev_kfree_skb_any(skb);\n" + "+\telse\n" + "+\t\tieee80211_free_txskb(sc->hw, skb);\n" + "+\n" + " \treturn NULL;\n" + " }\n" + " \n" + "@@ -1870,6 +1877,7 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb,\n" + " \tstruct ath_atx_tid *tid = NULL;\n" + " \tstruct ath_buf *bf;\n" + " \tu8 tidno;\n" + "+\tbool is_paprd = false;\n" + " \n" + " \tif ((sc->sc_flags & SC_OP_TXAGGR) && txctl->an &&\n" + " \t\tieee80211_is_data_qos(hdr->frame_control)) {\n" + "@@ -1887,7 +1895,10 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb,\n" + " \t\t */\n" + " \t\tath_tx_send_ampdu(sc, tid, skb, txctl);\n" + " \t} else {\n" + "-\t\tbf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb);\n" + "+\t\tif (txctl->paprd)\n" + "+\t\t\tis_paprd = true;\n" + "+\n" + "+\t\tbf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, is_paprd);\n" + " \t\tif (!bf)\n" + " \t\t\treturn;" -5e003a3f0bb830dd9f07401b18acd13090b27ff9e0a1408074a8bc7ca1104aa6 +6bac0c4d39babf7efec3e26d00968232a032a90889bc91a1954221e4248ad60f
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.