Bladeren bron

qcacld-3.0: Fix nbuf tracking in ol_rx_fwd_check(), ol_rx_defrag_decap_recombine()

In ol_rx_fwd_check, do not remove nbuf Rx packet in case intra-bss
forwarded traffic. Regular Tx completion will take care to free the nbuf
and its tracking.

In ol_rx_defrag_decap_recombine(), it is callers responsibilty to free the
source nbuf if concatinate succeeds.

Change-Id: Iaf83524924e312bf819483de38603241f45170a5
CRs-Fixed: 2047377
Manjunathappa Prakash 8 jaren geleden
bovenliggende
commit
2754f65563
3 gewijzigde bestanden met toevoegingen van 4 en 4 verwijderingen
  1. 0 1
      core/dp/txrx/ol_rx_defrag.c
  2. 4 1
      core/dp/txrx/ol_rx_defrag.h
  3. 0 2
      core/dp/txrx/ol_rx_fwd.c

+ 0 - 1
core/dp/txrx/ol_rx_defrag.c

@@ -1143,7 +1143,6 @@ ol_rx_defrag_decap_recombine(htt_pdev_handle htt_pdev,
 	qdf_nbuf_set_next(rx_nbuf, NULL);
 	while (msdu) {
 		htt_rx_msdu_desc_free(htt_pdev, msdu);
-		qdf_net_buf_debug_release_skb(msdu);
 		tmp = qdf_nbuf_next(msdu);
 		qdf_nbuf_set_next(msdu, NULL);
 		ol_rx_frag_pull_hdr(htt_pdev, msdu, hdrsize);

+ 4 - 1
core/dp/txrx/ol_rx_defrag.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -179,6 +179,9 @@ static inline uint8_t ol_rx_defrag_concat(qdf_nbuf_t dst, qdf_nbuf_t src)
 	if (qdf_nbuf_cat(dst, src))
 		return OL_RX_DEFRAG_ERR;
 
+	/* Free source buffer */
+	qdf_nbuf_free(src);
+
 	return OL_RX_DEFRAG_OK;
 }
 

+ 0 - 2
core/dp/txrx/ol_rx_fwd.c

@@ -203,7 +203,6 @@ ol_rx_fwd_check(struct ol_txrx_vdev_t *vdev,
 			if (!ol_txrx_fwd_desc_thresh_check(vdev)) {
 				/* Drop the packet*/
 				htt_rx_msdu_desc_free(pdev->htt_pdev, msdu);
-				qdf_net_buf_debug_release_skb(msdu);
 				TXRX_STATS_MSDU_LIST_INCR(
 					pdev, tx.dropped.host_reject, msdu);
 				/* add NULL terminator */
@@ -222,7 +221,6 @@ ol_rx_fwd_check(struct ol_txrx_vdev_t *vdev,
 			 */
 			if (htt_rx_msdu_discard(pdev->htt_pdev, rx_desc)) {
 				htt_rx_msdu_desc_free(pdev->htt_pdev, msdu);
-				qdf_net_buf_debug_release_skb(msdu);
 				ol_rx_fwd_to_tx(tx_vdev, msdu);
 				msdu = NULL;    /* already handled this MSDU */
 				tx_vdev->fwd_tx_packets++;