Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e25c408 authored by Jianmin Zhu's avatar Jianmin Zhu
Browse files

qcacmn: Fix TSO nbuf unmap missing issue

if tx hw enqueue failed, tx descriptor is released first, nbuf pointer
in it is reset to NULL, then descriptor unmap will fail, nbuf is left
unmapped in wlan CB, in worst case, wlan CB DMA address space is used
out, new dma map will fail, assert will happen.

Change-Id: I97b4ab304d884cafcf0303529ed93682690dce12
CRs-Fixed: 3073466
parent 233121e3
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -2548,7 +2548,6 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
				    tid_tx_stats[tx_q->ring_id][msdu_info->tid];
			tid_stats->swdrop_cnt[TX_HW_ENQUEUE]++;

			dp_tx_desc_release(tx_desc, tx_q->desc_pool_id);
			if (msdu_info->frm_type == dp_tx_frm_me) {
				hw_enq_fail++;
				if (hw_enq_fail == msdu_info->num_seg) {
@@ -2574,6 +2573,7 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
						msdu_info->u.sg_info
						.curr_seg->next;
				i++;
				dp_tx_desc_release(tx_desc, tx_q->desc_pool_id);
				continue;
			}

@@ -2590,9 +2590,11 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
				 */
				dp_tx_comp_free_buf(soc, tx_desc);
				i++;
				dp_tx_desc_release(tx_desc, tx_q->desc_pool_id);
				continue;
			}

			dp_tx_desc_release(tx_desc, tx_q->desc_pool_id);
			goto done;
		}