Loading dp/wifi3.0/dp_internal.h +12 −0 Original line number Diff line number Diff line Loading @@ -1837,8 +1837,20 @@ void dp_peer_stats_update_protocol_cnt(struct cdp_soc_t *soc, #ifdef QCA_LL_TX_FLOW_CONTROL_V2 void dp_tx_dump_flow_pool_info(struct cdp_soc_t *soc_hdl); /** * dp_tx_dump_flow_pool_info_compact() - dump flow pool info * @soc: DP soc context * * Return: none */ void dp_tx_dump_flow_pool_info_compact(struct dp_soc *soc); int dp_tx_delete_flow_pool(struct dp_soc *soc, struct dp_tx_desc_pool_s *pool, bool force); #else static inline void dp_tx_dump_flow_pool_info_compact(struct dp_soc *soc) { } #endif /* QCA_LL_TX_FLOW_CONTROL_V2 */ #ifdef QCA_OL_DP_SRNG_LOCK_LESS_ACCESS Loading dp/wifi3.0/dp_main.c +12 −5 Original line number Diff line number Diff line Loading @@ -7503,7 +7503,7 @@ QDF_STATUS dp_reset_monitor_mode(struct cdp_soc_t *soc_hdl, * * Return: outstanding tx */ static uint32_t dp_get_tx_pending(struct cdp_pdev *pdev_handle) static int32_t dp_get_tx_pending(struct cdp_pdev *pdev_handle) { struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle; Loading Loading @@ -10085,6 +10085,8 @@ static QDF_STATUS dp_txrx_dump_stats(struct cdp_soc_t *psoc, uint16_t value, case CDP_DUMP_TX_FLOW_POOL_INFO: if (level == QDF_STATS_VERBOSITY_LEVEL_HIGH) cdp_dump_flow_pool_info((struct cdp_soc_t *)soc); else dp_tx_dump_flow_pool_info_compact(soc); break; case CDP_DP_NAPI_STATS: Loading Loading @@ -11559,6 +11561,7 @@ static QDF_STATUS dp_runtime_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl); struct dp_pdev *pdev; uint8_t i; int32_t tx_pending; pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id); if (!pdev) { Loading @@ -11567,9 +11570,11 @@ static QDF_STATUS dp_runtime_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) } /* Abort if there are any pending TX packets */ if (dp_get_tx_pending(dp_pdev_to_cdp_pdev(pdev)) > 0) { tx_pending = dp_get_tx_pending(dp_pdev_to_cdp_pdev(pdev)); if (tx_pending) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO, FL("Abort suspend due to pending TX packets")); FL("Abort suspend due to pending TX packets %d"), tx_pending); /* perform a force flush if tx is pending */ for (i = 0; i < soc->num_tcl_data_rings; i++) { Loading Loading @@ -12042,6 +12047,7 @@ static QDF_STATUS dp_bus_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id); int timeout = SUSPEND_DRAIN_WAIT; int drain_wait_delay = 50; /* 50 ms */ int32_t tx_pending; if (qdf_unlikely(!pdev)) { dp_err("pdev is NULL"); Loading @@ -12049,10 +12055,11 @@ static QDF_STATUS dp_bus_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) } /* Abort if there are any pending TX packets */ while (dp_get_tx_pending((struct cdp_pdev *)pdev) > 0) { while ((tx_pending = dp_get_tx_pending((struct cdp_pdev *)pdev))) { qdf_sleep(drain_wait_delay); if (timeout <= 0) { dp_err("TX frames are pending, abort suspend"); dp_info("TX frames are pending %d, abort suspend", tx_pending); return QDF_STATUS_E_TIMEOUT; } timeout = timeout - drain_wait_delay; Loading dp/wifi3.0/dp_rx.c +70 −10 Original line number Diff line number Diff line Loading @@ -1199,29 +1199,67 @@ static void dp_rx_fill_gro_info(struct dp_soc *soc, uint8_t *rx_tlv, * * @nbuf: pointer to msdu. * @mpdu_len: mpdu length * @l3_pad_len: L3 padding length by HW * * Return: returns true if nbuf is last msdu of mpdu else retuns false. */ static inline bool dp_rx_adjust_nbuf_len(qdf_nbuf_t nbuf, uint16_t *mpdu_len) static inline bool dp_rx_adjust_nbuf_len(qdf_nbuf_t nbuf, uint16_t *mpdu_len, uint32_t l3_pad_len) { bool last_nbuf; uint32_t pkt_hdr_size; if (*mpdu_len > (RX_DATA_BUFFER_SIZE - RX_PKT_TLVS_LEN)) { pkt_hdr_size = RX_PKT_TLVS_LEN + l3_pad_len; if ((*mpdu_len + pkt_hdr_size) > RX_DATA_BUFFER_SIZE) { qdf_nbuf_set_pktlen(nbuf, RX_DATA_BUFFER_SIZE); last_nbuf = false; *mpdu_len -= (RX_DATA_BUFFER_SIZE - pkt_hdr_size); } else { qdf_nbuf_set_pktlen(nbuf, (*mpdu_len + RX_PKT_TLVS_LEN)); qdf_nbuf_set_pktlen(nbuf, (*mpdu_len + pkt_hdr_size)); last_nbuf = true; *mpdu_len = 0; } *mpdu_len -= (RX_DATA_BUFFER_SIZE - RX_PKT_TLVS_LEN); return last_nbuf; } /** * dp_get_l3_hdr_pad_len() - get L3 header padding length. * * @soc: DP soc handle * @nbuf: pointer to msdu. * * Return: returns padding length in bytes. */ static inline uint32_t dp_get_l3_hdr_pad_len(struct dp_soc *soc, qdf_nbuf_t nbuf) { uint32_t l3_hdr_pad = 0; uint8_t *rx_tlv_hdr; struct hal_rx_msdu_metadata msdu_metadata; while (nbuf) { if (!qdf_nbuf_is_rx_chfrag_cont(nbuf)) { /* scattered msdu end with continuation is 0 */ rx_tlv_hdr = qdf_nbuf_data(nbuf); hal_rx_msdu_metadata_get(soc->hal_soc, rx_tlv_hdr, &msdu_metadata); l3_hdr_pad = msdu_metadata.l3_hdr_pad; break; } nbuf = nbuf->next; } return l3_hdr_pad; } /** * dp_rx_sg_create() - create a frag_list for MSDUs which are spread across * multiple nbufs. * @soc: DP SOC handle * @nbuf: pointer to the first msdu of an amsdu. * * This function implements the creation of RX frag_list for cases Loading @@ -1229,12 +1267,13 @@ static inline bool dp_rx_adjust_nbuf_len(qdf_nbuf_t nbuf, uint16_t *mpdu_len) * * Return: returns the head nbuf which contains complete frag_list. */ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) qdf_nbuf_t dp_rx_sg_create(struct dp_soc *soc, qdf_nbuf_t nbuf) { qdf_nbuf_t parent, frag_list, next = NULL; uint16_t frag_list_len = 0; uint16_t mpdu_len; bool last_nbuf; uint32_t l3_hdr_pad_offset = 0; /* * Use msdu len got from REO entry descriptor instead since Loading @@ -1242,6 +1281,7 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) * from REO descriptor is right for non-raw RX scatter msdu. */ mpdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); /* * this is a case where the complete msdu fits in one single nbuf. * in this case HW sets both start and end bit and we only need to Loading @@ -1254,6 +1294,8 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) return nbuf; } l3_hdr_pad_offset = dp_get_l3_hdr_pad_len(soc, nbuf); /* * This is a case where we have multiple msdus (A-MSDU) spread across * multiple nbufs. here we create a fraglist out of these nbufs. Loading @@ -1273,7 +1315,24 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) * nbufs will form the frag_list of the parent nbuf. */ qdf_nbuf_set_rx_chfrag_start(parent, 1); last_nbuf = dp_rx_adjust_nbuf_len(parent, &mpdu_len); /* * L3 header padding is only needed for the 1st buffer * in a scattered msdu */ last_nbuf = dp_rx_adjust_nbuf_len(parent, &mpdu_len, l3_hdr_pad_offset); /* * HW issue: MSDU cont bit is set but reported MPDU length can fit * in to single buffer * * Increment error stats and avoid SG list creation */ if (last_nbuf) { qdf_nbuf_pull_head(parent, RX_PKT_TLVS_LEN + l3_hdr_pad_offset); return parent; } /* * this is where we set the length of the fragments which are Loading @@ -1281,7 +1340,7 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) * till we hit the last_nbuf of the list. */ do { last_nbuf = dp_rx_adjust_nbuf_len(nbuf, &mpdu_len); last_nbuf = dp_rx_adjust_nbuf_len(nbuf, &mpdu_len, 0); qdf_nbuf_pull_head(nbuf, RX_PKT_TLVS_LEN); frag_list_len += qdf_nbuf_len(nbuf); Loading @@ -1298,7 +1357,8 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) qdf_nbuf_append_ext_list(parent, frag_list, frag_list_len); parent->next = next; qdf_nbuf_pull_head(parent, RX_PKT_TLVS_LEN); qdf_nbuf_pull_head(parent, RX_PKT_TLVS_LEN + l3_hdr_pad_offset); return parent; } Loading Loading @@ -2833,7 +2893,7 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_pull_head(nbuf, RX_PKT_TLVS_LEN); } else if (qdf_nbuf_is_rx_chfrag_cont(nbuf)) { msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); nbuf = dp_rx_sg_create(nbuf); nbuf = dp_rx_sg_create(soc, nbuf); next = nbuf->next; if (qdf_nbuf_is_raw_frame(nbuf)) { Loading dp/wifi3.0/dp_rx.h +2 −1 Original line number Diff line number Diff line Loading @@ -676,6 +676,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, /** * dp_rx_sg_create() - create a frag_list for MSDUs which are spread across * multiple nbufs. * @soc: core txrx main context * @nbuf: pointer to the first msdu of an amsdu. * * This function implements the creation of RX frag_list for cases Loading @@ -683,7 +684,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, * * Return: returns the head nbuf which contains complete frag_list. */ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf); qdf_nbuf_t dp_rx_sg_create(struct dp_soc *soc, qdf_nbuf_t nbuf); /* Loading dp/wifi3.0/dp_rx_err.c +2 −2 Original line number Diff line number Diff line Loading @@ -606,7 +606,7 @@ dp_rx_reo_err_entry_process(struct dp_soc *soc, rx_tlv_hdr_last = qdf_nbuf_data(tail_nbuf); if (qdf_unlikely(head_nbuf != tail_nbuf)) { nbuf = dp_rx_sg_create(head_nbuf); nbuf = dp_rx_sg_create(soc, head_nbuf); qdf_nbuf_set_is_frag(nbuf, 1); DP_STATS_INC(soc, rx.err.reo_err_oor_sg_count, 1); } Loading Loading @@ -2375,7 +2375,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, * QCN9000 has this support */ if (qdf_nbuf_is_rx_chfrag_cont(nbuf)) { nbuf = dp_rx_sg_create(nbuf); nbuf = dp_rx_sg_create(soc, nbuf); next = nbuf->next; /* * SG error handling is not done correctly, Loading Loading
dp/wifi3.0/dp_internal.h +12 −0 Original line number Diff line number Diff line Loading @@ -1837,8 +1837,20 @@ void dp_peer_stats_update_protocol_cnt(struct cdp_soc_t *soc, #ifdef QCA_LL_TX_FLOW_CONTROL_V2 void dp_tx_dump_flow_pool_info(struct cdp_soc_t *soc_hdl); /** * dp_tx_dump_flow_pool_info_compact() - dump flow pool info * @soc: DP soc context * * Return: none */ void dp_tx_dump_flow_pool_info_compact(struct dp_soc *soc); int dp_tx_delete_flow_pool(struct dp_soc *soc, struct dp_tx_desc_pool_s *pool, bool force); #else static inline void dp_tx_dump_flow_pool_info_compact(struct dp_soc *soc) { } #endif /* QCA_LL_TX_FLOW_CONTROL_V2 */ #ifdef QCA_OL_DP_SRNG_LOCK_LESS_ACCESS Loading
dp/wifi3.0/dp_main.c +12 −5 Original line number Diff line number Diff line Loading @@ -7503,7 +7503,7 @@ QDF_STATUS dp_reset_monitor_mode(struct cdp_soc_t *soc_hdl, * * Return: outstanding tx */ static uint32_t dp_get_tx_pending(struct cdp_pdev *pdev_handle) static int32_t dp_get_tx_pending(struct cdp_pdev *pdev_handle) { struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle; Loading Loading @@ -10085,6 +10085,8 @@ static QDF_STATUS dp_txrx_dump_stats(struct cdp_soc_t *psoc, uint16_t value, case CDP_DUMP_TX_FLOW_POOL_INFO: if (level == QDF_STATS_VERBOSITY_LEVEL_HIGH) cdp_dump_flow_pool_info((struct cdp_soc_t *)soc); else dp_tx_dump_flow_pool_info_compact(soc); break; case CDP_DP_NAPI_STATS: Loading Loading @@ -11559,6 +11561,7 @@ static QDF_STATUS dp_runtime_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl); struct dp_pdev *pdev; uint8_t i; int32_t tx_pending; pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id); if (!pdev) { Loading @@ -11567,9 +11570,11 @@ static QDF_STATUS dp_runtime_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) } /* Abort if there are any pending TX packets */ if (dp_get_tx_pending(dp_pdev_to_cdp_pdev(pdev)) > 0) { tx_pending = dp_get_tx_pending(dp_pdev_to_cdp_pdev(pdev)); if (tx_pending) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO, FL("Abort suspend due to pending TX packets")); FL("Abort suspend due to pending TX packets %d"), tx_pending); /* perform a force flush if tx is pending */ for (i = 0; i < soc->num_tcl_data_rings; i++) { Loading Loading @@ -12042,6 +12047,7 @@ static QDF_STATUS dp_bus_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id); int timeout = SUSPEND_DRAIN_WAIT; int drain_wait_delay = 50; /* 50 ms */ int32_t tx_pending; if (qdf_unlikely(!pdev)) { dp_err("pdev is NULL"); Loading @@ -12049,10 +12055,11 @@ static QDF_STATUS dp_bus_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) } /* Abort if there are any pending TX packets */ while (dp_get_tx_pending((struct cdp_pdev *)pdev) > 0) { while ((tx_pending = dp_get_tx_pending((struct cdp_pdev *)pdev))) { qdf_sleep(drain_wait_delay); if (timeout <= 0) { dp_err("TX frames are pending, abort suspend"); dp_info("TX frames are pending %d, abort suspend", tx_pending); return QDF_STATUS_E_TIMEOUT; } timeout = timeout - drain_wait_delay; Loading
dp/wifi3.0/dp_rx.c +70 −10 Original line number Diff line number Diff line Loading @@ -1199,29 +1199,67 @@ static void dp_rx_fill_gro_info(struct dp_soc *soc, uint8_t *rx_tlv, * * @nbuf: pointer to msdu. * @mpdu_len: mpdu length * @l3_pad_len: L3 padding length by HW * * Return: returns true if nbuf is last msdu of mpdu else retuns false. */ static inline bool dp_rx_adjust_nbuf_len(qdf_nbuf_t nbuf, uint16_t *mpdu_len) static inline bool dp_rx_adjust_nbuf_len(qdf_nbuf_t nbuf, uint16_t *mpdu_len, uint32_t l3_pad_len) { bool last_nbuf; uint32_t pkt_hdr_size; if (*mpdu_len > (RX_DATA_BUFFER_SIZE - RX_PKT_TLVS_LEN)) { pkt_hdr_size = RX_PKT_TLVS_LEN + l3_pad_len; if ((*mpdu_len + pkt_hdr_size) > RX_DATA_BUFFER_SIZE) { qdf_nbuf_set_pktlen(nbuf, RX_DATA_BUFFER_SIZE); last_nbuf = false; *mpdu_len -= (RX_DATA_BUFFER_SIZE - pkt_hdr_size); } else { qdf_nbuf_set_pktlen(nbuf, (*mpdu_len + RX_PKT_TLVS_LEN)); qdf_nbuf_set_pktlen(nbuf, (*mpdu_len + pkt_hdr_size)); last_nbuf = true; *mpdu_len = 0; } *mpdu_len -= (RX_DATA_BUFFER_SIZE - RX_PKT_TLVS_LEN); return last_nbuf; } /** * dp_get_l3_hdr_pad_len() - get L3 header padding length. * * @soc: DP soc handle * @nbuf: pointer to msdu. * * Return: returns padding length in bytes. */ static inline uint32_t dp_get_l3_hdr_pad_len(struct dp_soc *soc, qdf_nbuf_t nbuf) { uint32_t l3_hdr_pad = 0; uint8_t *rx_tlv_hdr; struct hal_rx_msdu_metadata msdu_metadata; while (nbuf) { if (!qdf_nbuf_is_rx_chfrag_cont(nbuf)) { /* scattered msdu end with continuation is 0 */ rx_tlv_hdr = qdf_nbuf_data(nbuf); hal_rx_msdu_metadata_get(soc->hal_soc, rx_tlv_hdr, &msdu_metadata); l3_hdr_pad = msdu_metadata.l3_hdr_pad; break; } nbuf = nbuf->next; } return l3_hdr_pad; } /** * dp_rx_sg_create() - create a frag_list for MSDUs which are spread across * multiple nbufs. * @soc: DP SOC handle * @nbuf: pointer to the first msdu of an amsdu. * * This function implements the creation of RX frag_list for cases Loading @@ -1229,12 +1267,13 @@ static inline bool dp_rx_adjust_nbuf_len(qdf_nbuf_t nbuf, uint16_t *mpdu_len) * * Return: returns the head nbuf which contains complete frag_list. */ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) qdf_nbuf_t dp_rx_sg_create(struct dp_soc *soc, qdf_nbuf_t nbuf) { qdf_nbuf_t parent, frag_list, next = NULL; uint16_t frag_list_len = 0; uint16_t mpdu_len; bool last_nbuf; uint32_t l3_hdr_pad_offset = 0; /* * Use msdu len got from REO entry descriptor instead since Loading @@ -1242,6 +1281,7 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) * from REO descriptor is right for non-raw RX scatter msdu. */ mpdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); /* * this is a case where the complete msdu fits in one single nbuf. * in this case HW sets both start and end bit and we only need to Loading @@ -1254,6 +1294,8 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) return nbuf; } l3_hdr_pad_offset = dp_get_l3_hdr_pad_len(soc, nbuf); /* * This is a case where we have multiple msdus (A-MSDU) spread across * multiple nbufs. here we create a fraglist out of these nbufs. Loading @@ -1273,7 +1315,24 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) * nbufs will form the frag_list of the parent nbuf. */ qdf_nbuf_set_rx_chfrag_start(parent, 1); last_nbuf = dp_rx_adjust_nbuf_len(parent, &mpdu_len); /* * L3 header padding is only needed for the 1st buffer * in a scattered msdu */ last_nbuf = dp_rx_adjust_nbuf_len(parent, &mpdu_len, l3_hdr_pad_offset); /* * HW issue: MSDU cont bit is set but reported MPDU length can fit * in to single buffer * * Increment error stats and avoid SG list creation */ if (last_nbuf) { qdf_nbuf_pull_head(parent, RX_PKT_TLVS_LEN + l3_hdr_pad_offset); return parent; } /* * this is where we set the length of the fragments which are Loading @@ -1281,7 +1340,7 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) * till we hit the last_nbuf of the list. */ do { last_nbuf = dp_rx_adjust_nbuf_len(nbuf, &mpdu_len); last_nbuf = dp_rx_adjust_nbuf_len(nbuf, &mpdu_len, 0); qdf_nbuf_pull_head(nbuf, RX_PKT_TLVS_LEN); frag_list_len += qdf_nbuf_len(nbuf); Loading @@ -1298,7 +1357,8 @@ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf) qdf_nbuf_append_ext_list(parent, frag_list, frag_list_len); parent->next = next; qdf_nbuf_pull_head(parent, RX_PKT_TLVS_LEN); qdf_nbuf_pull_head(parent, RX_PKT_TLVS_LEN + l3_hdr_pad_offset); return parent; } Loading Loading @@ -2833,7 +2893,7 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_pull_head(nbuf, RX_PKT_TLVS_LEN); } else if (qdf_nbuf_is_rx_chfrag_cont(nbuf)) { msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); nbuf = dp_rx_sg_create(nbuf); nbuf = dp_rx_sg_create(soc, nbuf); next = nbuf->next; if (qdf_nbuf_is_raw_frame(nbuf)) { Loading
dp/wifi3.0/dp_rx.h +2 −1 Original line number Diff line number Diff line Loading @@ -676,6 +676,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, /** * dp_rx_sg_create() - create a frag_list for MSDUs which are spread across * multiple nbufs. * @soc: core txrx main context * @nbuf: pointer to the first msdu of an amsdu. * * This function implements the creation of RX frag_list for cases Loading @@ -683,7 +684,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, * * Return: returns the head nbuf which contains complete frag_list. */ qdf_nbuf_t dp_rx_sg_create(qdf_nbuf_t nbuf); qdf_nbuf_t dp_rx_sg_create(struct dp_soc *soc, qdf_nbuf_t nbuf); /* Loading
dp/wifi3.0/dp_rx_err.c +2 −2 Original line number Diff line number Diff line Loading @@ -606,7 +606,7 @@ dp_rx_reo_err_entry_process(struct dp_soc *soc, rx_tlv_hdr_last = qdf_nbuf_data(tail_nbuf); if (qdf_unlikely(head_nbuf != tail_nbuf)) { nbuf = dp_rx_sg_create(head_nbuf); nbuf = dp_rx_sg_create(soc, head_nbuf); qdf_nbuf_set_is_frag(nbuf, 1); DP_STATS_INC(soc, rx.err.reo_err_oor_sg_count, 1); } Loading Loading @@ -2375,7 +2375,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, * QCN9000 has this support */ if (qdf_nbuf_is_rx_chfrag_cont(nbuf)) { nbuf = dp_rx_sg_create(nbuf); nbuf = dp_rx_sg_create(soc, nbuf); next = nbuf->next; /* * SG error handling is not done correctly, Loading