Browse Source

Merge "qcacmn: Incorrect use of tx descriptor"

Linux Build Service Account 7 years ago
parent
commit
eba9b1e192
1 changed files with 11 additions and 11 deletions
  1. 11 11
      dp/wifi3.0/dp_tx.c

+ 11 - 11
dp/wifi3.0/dp_tx.c

@@ -701,8 +701,6 @@ static struct dp_tx_desc_s *dp_tx_prepare_desc(struct dp_vdev *vdev,
 
 	return tx_desc;
 failure:
-	if (qdf_unlikely(tx_desc->flags & DP_TX_DESC_FLAG_ME))
-		dp_tx_me_free_buf(pdev, tx_desc->me_buffer);
 	dp_tx_desc_release(tx_desc, desc_pool_id);
 	return NULL;
 }
@@ -1107,23 +1105,25 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
 		tx_desc = dp_tx_prepare_desc(vdev, nbuf, msdu_info,
 				tx_q->desc_pool_id);
 
-		if (msdu_info->frm_type == dp_tx_frm_me) {
-			tx_desc->me_buffer =
-				msdu_info->u.sg_info.curr_seg->frags[0].vaddr;
-			tx_desc->flags |= DP_TX_DESC_FLAG_ME;
-		}
-
 		if (!tx_desc) {
 			QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
 				  "%s Tx_desc prepare Fail vdev %p queue %d\n",
 				  __func__, vdev, tx_q->desc_pool_id);
 
-			if (tx_desc->flags & DP_TX_DESC_FLAG_ME)
-				dp_tx_me_free_buf(pdev, tx_desc->me_buffer);
-			dp_tx_desc_release(tx_desc, tx_q->desc_pool_id);
+			if (msdu_info->frm_type == dp_tx_frm_me) {
+				dp_tx_me_free_buf(pdev,
+					(void *)(msdu_info->u.sg_info
+						.curr_seg->frags[0].vaddr));
+			}
 			goto done;
 		}
 
+		if (msdu_info->frm_type == dp_tx_frm_me) {
+			tx_desc->me_buffer =
+				msdu_info->u.sg_info.curr_seg->frags[0].vaddr;
+			tx_desc->flags |= DP_TX_DESC_FLAG_ME;
+		}
+
 		/*
 		 * Enqueue the Tx MSDU descriptor to HW for transmit
 		 */