Skip to contentSkip to conversation

net/mana: use the correct WQE count for ringing RQ doorbell

PATCH Superseded [email protected] 2 participants 4 messages Jul 10, 2023 – Jul 11, 2023 Network drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 net/mana: use the correct WQE count for ringing RQ doorbell

From: Long Li <[email protected]>

The hardware specification specifies that WQE_COUNT should set to 0 for the Receive Queue. Although currently the hardware doesn't enforce the check, in the future releases it may check on this value.

---
 drivers/net/mana/mana.h |  2 +-
 drivers/net/mana/rx.c   | 11 +++++++----
 2 files changed, 8 insertions(+), 5 deletions(-)
drivers/net/mana/mana.h +1 -1
index dfeda531eb..5801491d75 100644
@@ -457,7 +457,7 @@ extern int mana_logtype_init;
 
 int mana_ring_doorbell(void *db_page, enum gdma_queue_types queue_type,
 		       uint32_t queue_id, uint32_t tail, uint8_t arm);
-int mana_rq_ring_doorbell(struct mana_rxq *rxq, uint8_t arm);
+int mana_rq_ring_doorbell(struct mana_rxq *rxq);
 
 int gdma_post_work_request(struct mana_gdma_queue *queue,
 			   struct gdma_work_request *work_req,
drivers/net/mana/rx.c +7 -4
index b840e402f9..4b8aca49ef 100644
@@ -22,7 +22,7 @@ static uint8_t mana_rss_hash_key_default[TOEPLITZ_HASH_KEY_SIZE_IN_BYTES] = {
 };
 
 int
-mana_rq_ring_doorbell(struct mana_rxq *rxq, uint8_t arm)
+mana_rq_ring_doorbell(struct mana_rxq *rxq)
 {
 	struct mana_priv *priv = rxq->priv;
 	int ret;
@@ -36,10 +36,13 @@ mana_rq_ring_doorbell(struct mana_rxq *rxq, uint8_t arm)
 		db_page = process_priv->db_page;
 	}
 
+	/* Hardware Spec specifies that software client should set 0 for
+	 * wqe_cnt for Receive Queues.
+	 */
 	ret = mana_ring_doorbell(db_page, GDMA_QUEUE_RECEIVE,
 			 rxq->gdma_rq.id,
 			 rxq->gdma_rq.head * GDMA_WQE_ALIGNMENT_UNIT_SIZE,
-			 arm);
+			 0);
 
 	if (ret)
 		DP_LOG(ERR, "failed to ring RX doorbell ret %d", ret);
@@ -120,7 +123,7 @@ mana_alloc_and_post_rx_wqes(struct mana_rxq *rxq)
 		}
 	}
 
-	mana_rq_ring_doorbell(rxq, rxq->num_desc);
+	mana_rq_ring_doorbell(rxq);
 
 	return ret;
 }
@@ -532,7 +535,7 @@ mana_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
 	}
 
 	if (wqe_posted)
-		mana_rq_ring_doorbell(rxq, wqe_posted);
+		mana_rq_ring_doorbell(rxq);
 
 	return pkt_received;
 }
Signature · 1 line
2.34.1
#1 lore raw

PATCH v2 1/1 net/mana: use the correct WQE count for ringing RQ doorbell

From: Long Li <[email protected]>

The hardware specification specifies that WQE_COUNT should set to 0 for the Receive Queue. Although currently the hardware doesn't enforce the check, in the future releases it may check on this value.

---
Change log:
v2: added "Signed-off-by"

 drivers/net/mana/mana.h |  2 +-
 drivers/net/mana/rx.c   | 11 +++++++----
 2 files changed, 8 insertions(+), 5 deletions(-)
drivers/net/mana/mana.h +1 -1
index dfeda531eb..5801491d75 100644
@@ -457,7 +457,7 @@ extern int mana_logtype_init;
 
 int mana_ring_doorbell(void *db_page, enum gdma_queue_types queue_type,
 		       uint32_t queue_id, uint32_t tail, uint8_t arm);
-int mana_rq_ring_doorbell(struct mana_rxq *rxq, uint8_t arm);
+int mana_rq_ring_doorbell(struct mana_rxq *rxq);
 
 int gdma_post_work_request(struct mana_gdma_queue *queue,
 			   struct gdma_work_request *work_req,
drivers/net/mana/rx.c +7 -4
index b840e402f9..4b8aca49ef 100644
@@ -22,7 +22,7 @@ static uint8_t mana_rss_hash_key_default[TOEPLITZ_HASH_KEY_SIZE_IN_BYTES] = {
 };
 
 int
-mana_rq_ring_doorbell(struct mana_rxq *rxq, uint8_t arm)
+mana_rq_ring_doorbell(struct mana_rxq *rxq)
 {
 	struct mana_priv *priv = rxq->priv;
 	int ret;
@@ -36,10 +36,13 @@ mana_rq_ring_doorbell(struct mana_rxq *rxq, uint8_t arm)
 		db_page = process_priv->db_page;
 	}
 
+	/* Hardware Spec specifies that software client should set 0 for
+	 * wqe_cnt for Receive Queues.
+	 */
 	ret = mana_ring_doorbell(db_page, GDMA_QUEUE_RECEIVE,
 			 rxq->gdma_rq.id,
 			 rxq->gdma_rq.head * GDMA_WQE_ALIGNMENT_UNIT_SIZE,
-			 arm);
+			 0);
 
 	if (ret)
 		DP_LOG(ERR, "failed to ring RX doorbell ret %d", ret);
@@ -120,7 +123,7 @@ mana_alloc_and_post_rx_wqes(struct mana_rxq *rxq)
 		}
 	}
 
-	mana_rq_ring_doorbell(rxq, rxq->num_desc);
+	mana_rq_ring_doorbell(rxq);
 
 	return ret;
 }
@@ -532,7 +535,7 @@ mana_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
 	}
 
 	if (wqe_posted)
-		mana_rq_ring_doorbell(rxq, wqe_posted);
+		mana_rq_ring_doorbell(rxq);
 
 	return pkt_received;
 }
Signature · 1 line
2.34.1
#2 lore raw
Quoted 8 lines · On 7/11/2023 12:51 AM, [email protected] wrote:

From: Long Li <[email protected]>

The hardware specification specifies that WQE_COUNT should set to 0 for the Receive Queue. Although currently the hardware doesn't enforce the check, in the future releases it may check on this value.

Is Fixes tag intentionally omitted since change is because of HW / Spec change, instead of code being wrong when implemented?