summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/CLD_TXRX/HTT/htt_rx.c22
-rw-r--r--CORE/CLD_TXRX/HTT/htt_t2h.c7
2 files changed, 28 insertions, 1 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt_rx.c b/CORE/CLD_TXRX/HTT/htt_rx.c
index 0d80a498a370..d4d0b60f31ab 100644
--- a/CORE/CLD_TXRX/HTT/htt_rx.c
+++ b/CORE/CLD_TXRX/HTT/htt_rx.c
@@ -1388,6 +1388,28 @@ htt_rx_offload_msdu_pop_hl(
adf_nbuf_t *head_buf,
adf_nbuf_t *tail_buf)
{
+ adf_nbuf_t buf;
+ u_int32_t *msdu_hdr, msdu_len;
+
+ *head_buf = *tail_buf = buf = offload_deliver_msg;
+ msdu_hdr = (u_int32_t *)adf_nbuf_data(buf);
+
+ /* First dword */
+
+ /* Second dword */
+ msdu_hdr++;
+ msdu_len = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_LEN_GET(*msdu_hdr);
+ *peer_id = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_PEER_ID_GET(*msdu_hdr);
+
+ /* Third dword */
+ msdu_hdr++;
+ *vdev_id = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_VDEV_ID_GET(*msdu_hdr);
+ *tid = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_TID_GET(*msdu_hdr);
+ *fw_desc = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_DESC_GET(*msdu_hdr);
+
+ adf_nbuf_pull_head(buf, HTT_RX_OFFLOAD_DELIVER_IND_MSDU_HDR_BYTES \
+ + HTT_RX_OFFLOAD_DELIVER_IND_HDR_BYTES);
+ adf_nbuf_set_pktlen(buf, msdu_len);
return 0;
}
diff --git a/CORE/CLD_TXRX/HTT/htt_t2h.c b/CORE/CLD_TXRX/HTT/htt_t2h.c
index d768ac01f8f4..0271c4d7a0be 100644
--- a/CORE/CLD_TXRX/HTT/htt_t2h.c
+++ b/CORE/CLD_TXRX/HTT/htt_t2h.c
@@ -198,7 +198,12 @@ htt_t2h_lp_msg_handler(void *context, adf_nbuf_t htt_t2h_msg )
pdev->txrx_pdev,
htt_t2h_msg,
msdu_cnt);
- break;
+ if (pdev->cfg.is_high_latency) {
+ /* return here for HL to avoid double free on htt_t2h_msg */
+ return;
+ } else {
+ break;
+ }
}
case HTT_T2H_MSG_TYPE_RX_FRAG_IND:
{