From bd0375c2de972293ca26551fc4b9d278365f4759 Mon Sep 17 00:00:00 2001 From: Chaithanya Garrepalli Date: Wed, 22 Jun 2022 21:59:12 +0530 Subject: [PATCH] qcacmn: Remove unnecessary checks in Tx path 1. Remove prints in per packet path 2. Add prefecth for skb shinfo 3. Avoid qdf_get_cpu() in DP tx Change-Id: I86d196cc7865a2d5b3a5a6098f6f7d84397a60d0 CRs-Fixed: 3227568 --- dp/wifi3.0/be/dp_be_tx.c | 5 ----- dp/wifi3.0/dp_rx.c | 21 +++++++++++++++++++-- dp/wifi3.0/dp_tx.c | 6 ++---- dp/wifi3.0/dp_tx.h | 6 +----- qdf/inc/qdf_nbuf.h | 6 ++++++ qdf/linux/src/i_qdf_nbuf.h | 13 +++++++++++++ 6 files changed, 41 insertions(+), 16 deletions(-) diff --git a/dp/wifi3.0/be/dp_be_tx.c b/dp/wifi3.0/be/dp_be_tx.c index 1cafd78876..803226cb3d 100644 --- a/dp/wifi3.0/be/dp_be_tx.c +++ b/dp/wifi3.0/be/dp_be_tx.c @@ -637,11 +637,6 @@ dp_tx_hw_enqueue_be(struct dp_soc *soc, struct dp_vdev *vdev, dp_tx_set_min_rates_for_critical_frames(soc, hal_tx_desc_cached, tx_desc->nbuf); dp_tx_desc_set_ktimestamp(vdev, tx_desc); - dp_verbose_debug("length:%d , type = %d, dma_addr %llx, offset %d desc id %u", - tx_desc->length, - (tx_desc->flags & DP_TX_DESC_FLAG_FRAG), - (uint64_t)tx_desc->dma_addr, tx_desc->pkt_offset, - tx_desc->id); hal_ring_hdl = dp_tx_get_hal_ring_hdl(soc, ring_id); diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 4188fae574..8fde1da701 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -833,6 +833,19 @@ void dp_classify_critical_pkts(struct dp_soc *soc, struct dp_vdev *vdev, } #endif +#ifdef QCA_OL_TX_MULTIQ_SUPPORT +static inline +void dp_rx_nbuf_queue_mapping_set(qdf_nbuf_t nbuf, uint8_t ring_id) +{ + qdf_nbuf_set_queue_mapping(nbuf, ring_id); +} +#else +static inline +void dp_rx_nbuf_queue_mapping_set(qdf_nbuf_t nbuf, uint8_t ring_id) +{ +} +#endif + /* * dp_rx_intrabss_mcbc_fwd() - Does intrabss forward for mcast packets * @@ -850,6 +863,7 @@ bool dp_rx_intrabss_mcbc_fwd(struct dp_soc *soc, struct dp_txrx_peer *ta_peer, { uint16_t len; qdf_nbuf_t nbuf_copy; + uint8_t ring_id = QDF_NBUF_CB_RX_CTX_ID(nbuf); if (dp_rx_intrabss_eapol_drop_check(soc, ta_peer, rx_tlv_hdr, nbuf)) @@ -870,14 +884,14 @@ bool dp_rx_intrabss_mcbc_fwd(struct dp_soc *soc, struct dp_txrx_peer *ta_peer, len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); + qdf_mem_set(nbuf_copy->cb, 0x0, sizeof(nbuf_copy->cb)); dp_classify_critical_pkts(soc, ta_peer->vdev, nbuf_copy); + dp_rx_nbuf_queue_mapping_set(nbuf_copy, ring_id); if (soc->arch_ops.dp_rx_intrabss_handle_nawds(soc, ta_peer, nbuf_copy, tid_stats)) return false; - /* set TX notify flag 0 to avoid unnecessary TX comp callback */ - qdf_nbuf_tx_notify_comp_set(nbuf_copy, 0); if (dp_tx_send((struct cdp_soc_t *)soc, ta_peer->vdev->vdev_id, nbuf_copy)) { DP_PEER_PER_PKT_STATS_INC_PKT(ta_peer, rx.intra_bss.fail, 1, @@ -910,6 +924,7 @@ bool dp_rx_intrabss_ucast_fwd(struct dp_soc *soc, struct dp_txrx_peer *ta_peer, struct cdp_tid_rx_stats *tid_stats) { uint16_t len; + uint8_t ring_id = QDF_NBUF_CB_RX_CTX_ID(nbuf); len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); @@ -935,8 +950,10 @@ bool dp_rx_intrabss_ucast_fwd(struct dp_soc *soc, struct dp_txrx_peer *ta_peer, } } + qdf_mem_set(nbuf->cb, 0x0, sizeof(nbuf->cb)); dp_classify_critical_pkts(soc, ta_peer->vdev, nbuf); + dp_rx_nbuf_queue_mapping_set(nbuf, ring_id); if (!dp_tx_send((struct cdp_soc_t *)soc, tx_vdev_id, nbuf)) { DP_PEER_PER_PKT_STATS_INC_PKT(ta_peer, rx.intra_bss.pkts, 1, diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 183ceb69f4..495b90dd32 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -3327,15 +3327,12 @@ qdf_nbuf_t dp_tx_send(struct cdp_soc_t *soc_hdl, uint8_t vdev_id, if (qdf_unlikely(!vdev)) return nbuf; - dp_verbose_debug("skb "QDF_MAC_ADDR_FMT, - QDF_MAC_ADDR_REF(nbuf->data)); - /* * Set Default Host TID value to invalid TID * (TID override disabled) */ msdu_info.tid = HTT_TX_EXT_TID_INVALID; - DP_STATS_INC_PKT(vdev, tx_i.rcvd, 1, qdf_nbuf_len(nbuf)); + DP_STATS_INC_PKT(vdev, tx_i.rcvd, 1, qdf_nbuf_headlen(nbuf)); if (qdf_unlikely(vdev->mesh_vdev)) { qdf_nbuf_t nbuf_mesh = dp_tx_extract_mesh_meta_data(vdev, nbuf, @@ -4863,6 +4860,7 @@ void dp_tx_prefetch_next_nbuf_data(struct dp_tx_desc_s *next) /* prefetch skb fields present in different cachelines */ qdf_prefetch(&nbuf->len); qdf_prefetch(&nbuf->users); + qdf_prefetch(skb_end_pointer(nbuf)); } } #else diff --git a/dp/wifi3.0/dp_tx.h b/dp/wifi3.0/dp_tx.h index c44daf0954..52a104314c 100644 --- a/dp/wifi3.0/dp_tx.h +++ b/dp/wifi3.0/dp_tx.h @@ -521,11 +521,7 @@ static inline void dp_tx_get_queue(struct dp_vdev *vdev, DP_TX_QUEUE_MASK; queue->desc_pool_id = queue_offset; - queue->ring_id = qdf_get_cpu(); - - dp_tx_debug("pool_id:%d ring_id: %d", - queue->desc_pool_id, queue->ring_id); - + queue->ring_id = qdf_nbuf_get_queue_mapping(nbuf); } /* diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 839a0101a6..ddb02939f3 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -4258,6 +4258,12 @@ qdf_nbuf_get_queue_mapping(qdf_nbuf_t buf) return __qdf_nbuf_get_queue_mapping(buf); } +static inline void +qdf_nbuf_set_queue_mapping(qdf_nbuf_t buf, uint16_t val) +{ + __qdf_nbuf_set_queue_mapping(buf, val); +} + static inline uint8_t * qdf_nbuf_get_priv_ptr(qdf_nbuf_t buf) { diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index 19e183ac7c..92ccb4a730 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/qdf/linux/src/i_qdf_nbuf.h @@ -2252,6 +2252,19 @@ __qdf_nbuf_get_queue_mapping(struct sk_buff *skb) return skb->queue_mapping; } +/** + * __qdf_nbuf_set_queue_mapping() - get the queue mapping set by linux kernel + * + * @buf: sk buff + * @val: queue_id + * + */ +static inline void +__qdf_nbuf_set_queue_mapping(struct sk_buff *skb, uint16_t val) +{ + skb_set_queue_mapping(skb, val); +} + /** * __qdf_nbuf_set_timestamp() - set the timestamp for frame *