qcacmn: Resume HW enqueue for TX desc for ME case if HW enqueue fails
In the present scenario, in case of Multicast Enhancement when the multicast packet is received the packet is converted to unicast packet and send to list of clients in the hyfi table. During conversion descriptors get allocated from ME pool for each client and the Tx MSDU descriptor is send to HW for transmit. On TX completion descriptors are freed and added back to ME pool. But if the HW enqueue is failed then the current TX descriptor is freed and added back to ME pool. But the remaining descriptor are neither retried nor freed thus resulting in Host Asserted Crash. So, adding a fix that if the HW enqueue is failed for ME packet, free that descriptor and retry HW enqueuing for the remaining descriptors. Change-Id: Ibfeb1b07ee8fab4bf066689d0258bb23fb2aa9f8 CRs-Fixed: 2545818
This commit is contained in:
@@ -1660,6 +1660,8 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
||||
dp_tx_me_free_buf(pdev,
|
||||
(void *)(msdu_info->u.sg_info
|
||||
.curr_seg->frags[0].vaddr));
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
@@ -1695,6 +1697,10 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
||||
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) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user