|
@@ -1114,8 +1114,10 @@ more_msdu_link_desc:
|
|
DP_RX_LIST_APPEND(head_nbuf, tail_nbuf, nbuf);
|
|
DP_RX_LIST_APPEND(head_nbuf, tail_nbuf, nbuf);
|
|
|
|
|
|
if (qdf_unlikely(msdu_list.msdu_info[i].msdu_flags &
|
|
if (qdf_unlikely(msdu_list.msdu_info[i].msdu_flags &
|
|
- HAL_MSDU_F_MSDU_CONTINUATION))
|
|
|
|
|
|
+ HAL_MSDU_F_MSDU_CONTINUATION)) {
|
|
|
|
+ qdf_nbuf_set_rx_chfrag_cont(nbuf, 1);
|
|
continue;
|
|
continue;
|
|
|
|
+ }
|
|
|
|
|
|
if (dp_rx_buffer_pool_refill(soc, head_nbuf,
|
|
if (dp_rx_buffer_pool_refill(soc, head_nbuf,
|
|
rx_desc_pool_id)) {
|
|
rx_desc_pool_id)) {
|
|
@@ -1180,6 +1182,15 @@ more_msdu_link_desc:
|
|
rx_tlv_hdr_last = qdf_nbuf_data(tail_nbuf);
|
|
rx_tlv_hdr_last = qdf_nbuf_data(tail_nbuf);
|
|
|
|
|
|
if (qdf_unlikely(head_nbuf != tail_nbuf)) {
|
|
if (qdf_unlikely(head_nbuf != tail_nbuf)) {
|
|
|
|
+ /*
|
|
|
|
+ * For SG case, only the length of last skb is valid
|
|
|
|
+ * as HW only populate the msdu_len for last msdu
|
|
|
|
+ * in rx link descriptor, use the length from
|
|
|
|
+ * last skb to overwrite the head skb for further
|
|
|
|
+ * SG processing.
|
|
|
|
+ */
|
|
|
|
+ QDF_NBUF_CB_RX_PKT_LEN(head_nbuf) =
|
|
|
|
+ QDF_NBUF_CB_RX_PKT_LEN(tail_nbuf);
|
|
nbuf = dp_rx_sg_create(soc, head_nbuf);
|
|
nbuf = dp_rx_sg_create(soc, head_nbuf);
|
|
qdf_nbuf_set_is_frag(nbuf, 1);
|
|
qdf_nbuf_set_is_frag(nbuf, 1);
|
|
DP_STATS_INC(soc, rx.err.reo_err_oor_sg_count, 1);
|
|
DP_STATS_INC(soc, rx.err.reo_err_oor_sg_count, 1);
|