From a084096398e6340f0cfe82cee09c76ebc5cadc67 Mon Sep 17 00:00:00 2001 From: Hemant Agrawal Date: Mon, 24 Jul 2017 13:01:46 +0530 Subject: [PATCH] net/dpaa2: enable Tx congestion state check For larger packet size congestion is observed on Tx Queues. This patch enables Tx Queue congestion state check support. If congested, try to resend the packet few times. Signed-off-by: Nipun Gupta Signed-off-by: Hemant Agrawal --- drivers/net/dpaa2/dpaa2_ethdev.c | 2 +- drivers/net/dpaa2/dpaa2_ethdev.h | 4 +++- drivers/net/dpaa2/dpaa2_rxtx.c | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index c6625058a1..429b3a086e 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -488,7 +488,7 @@ dpaa2_dev_tx_queue_setup(struct rte_eth_dev *dev, } dpaa2_q->tc_index = tc_id; - if (priv->flags & DPAA2_TX_CGR_SUPPORT) { + if (!(priv->flags & DPAA2_TX_CGR_OFF)) { struct dpni_congestion_notification_cfg cong_notif_cfg; cong_notif_cfg.units = DPNI_CONGESTION_UNIT_FRAMES; diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index ea7c0db8bf..a2902da2ba 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -55,6 +55,8 @@ */ #define CONG_EXIT_TX_THRESHOLD 480 +#define CONG_RETRY_COUNT 18000 + /* RX queue tail drop threshold * currently considering 32 KB packets */ @@ -66,7 +68,7 @@ /* Enable TX Congestion control support * default is disable */ -#define DPAA2_TX_CGR_SUPPORT 0x01 +#define DPAA2_TX_CGR_OFF 0x01 /* Disable RX tail drop, default is enable */ #define DPAA2_RX_TAILDROP_OFF 0x04 diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index 3db91d8b15..3c057a3902 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -524,7 +524,7 @@ uint16_t dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { /* Function to transmit the frames to given device and VQ*/ - uint32_t loop; + uint32_t loop, retry_count; int32_t ret; struct qbman_fd fd_arr[MAX_TX_RING_SLOTS]; struct rte_mbuf *mi; @@ -559,8 +559,13 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) /*Clear the unused FD fields before sending*/ while (nb_pkts) { /*Check if the queue is congested*/ - if (qbman_result_SCN_state_in_mem(dpaa2_q->cscn)) - goto skip_tx; + retry_count = 0; + if (qbman_result_SCN_state_in_mem(dpaa2_q->cscn)) { + retry_count++; + /* Retry for some time before giving up */ + if (retry_count > CONG_RETRY_COUNT) + goto skip_tx; + } frames_to_send = (nb_pkts >> 3) ? MAX_TX_RING_SLOTS : nb_pkts; -- 2.20.1