[dpdk-dev] net/bnx2x: Fix transmit queue free threshold

Message ID 1486757526-12028-1-git-send-email-ciwillia@brocade.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel compilation success Compilation OK

Commit Message

Chas Williams Feb. 10, 2017, 8:12 p.m. UTC
  The default tx_free_thresh is potentially larger than the allocated queue
which will result in TX queue cleanup never happening.  To fix this,
lower the default free threshold and ensure that the free threshold is
never greater than the maximum outstanding transmit buffers.

Fixes: 827ed2a118cc ("net/bnx2x: restructure Tx routine")

Signed-off-by: Chas Williams <ciwillia@brocade.com>
---
 drivers/net/bnx2x/bnx2x_rxtx.c | 2 ++
 drivers/net/bnx2x/bnx2x_rxtx.h | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
  

Comments

Harish Patil Feb. 23, 2017, 12:26 a.m. UTC | #1
>

>The default tx_free_thresh is potentially larger than the allocated queue

>which will result in TX queue cleanup never happening.  To fix this,

>lower the default free threshold and ensure that the free threshold is

>never greater than the maximum outstanding transmit buffers.

>

>Fixes: 827ed2a118cc ("net/bnx2x: restructure Tx routine")

>

>Signed-off-by: Chas Williams <ciwillia@brocade.com>

>---

> drivers/net/bnx2x/bnx2x_rxtx.c | 2 ++

> drivers/net/bnx2x/bnx2x_rxtx.h | 2 +-

> 2 files changed, 3 insertions(+), 1 deletion(-)

>

>diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c

>b/drivers/net/bnx2x/bnx2x_rxtx.c

>index 170e48f..adf0309 100644

>--- a/drivers/net/bnx2x/bnx2x_rxtx.c

>+++ b/drivers/net/bnx2x/bnx2x_rxtx.c

>@@ -273,6 +273,8 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,

> 

> 	txq->tx_free_thresh = tx_conf->tx_free_thresh ?

> 		tx_conf->tx_free_thresh : DEFAULT_TX_FREE_THRESH;

>+	txq->tx_free_thresh = min(txq->tx_free_thresh,

>+				  txq->nb_tx_desc - BDS_PER_TX_PKT);

> 

> 	PMD_INIT_LOG(DEBUG, "fp[%02d] req_bd=%u, thresh=%u, usable_bd=%lu, "

> 		     "total_bd=%lu, tx_pages=%u",

>diff --git a/drivers/net/bnx2x/bnx2x_rxtx.h

>b/drivers/net/bnx2x/bnx2x_rxtx.h

>index dd251aa..2e38ec2 100644

>--- a/drivers/net/bnx2x/bnx2x_rxtx.h

>+++ b/drivers/net/bnx2x/bnx2x_rxtx.h

>@@ -11,7 +11,7 @@

> #ifndef _BNX2X_RXTX_H_

> #define _BNX2X_RXTX_H_

> 

>-#define DEFAULT_TX_FREE_THRESH   512

>+#define DEFAULT_TX_FREE_THRESH   64

> #define RTE_PMD_BNX2X_TX_MAX_BURST 1

> 

> /**

>-- 

>2.1.4

>

>


Acked-by: Harish Patil <harish.patil@qlogic.com>
  
Ferruh Yigit Feb. 23, 2017, 10:09 a.m. UTC | #2
On 2/23/2017 12:26 AM, Harish Patil wrote:
>>
>> The default tx_free_thresh is potentially larger than the allocated queue
>> which will result in TX queue cleanup never happening.  To fix this,
>> lower the default free threshold and ensure that the free threshold is
>> never greater than the maximum outstanding transmit buffers.
>>
>> Fixes: 827ed2a118cc ("net/bnx2x: restructure Tx routine")
>>
>> Signed-off-by: Chas Williams <ciwillia@brocade.com>

> Acked-by: Harish Patil <harish.patil@qlogic.com>

    net/bnx2x: fix transmit queue free threshold

    Cc: stable@dpdk.org

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
index 170e48f..adf0309 100644
--- a/drivers/net/bnx2x/bnx2x_rxtx.c
+++ b/drivers/net/bnx2x/bnx2x_rxtx.c
@@ -273,6 +273,8 @@  bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
 
 	txq->tx_free_thresh = tx_conf->tx_free_thresh ?
 		tx_conf->tx_free_thresh : DEFAULT_TX_FREE_THRESH;
+	txq->tx_free_thresh = min(txq->tx_free_thresh,
+				  txq->nb_tx_desc - BDS_PER_TX_PKT);
 
 	PMD_INIT_LOG(DEBUG, "fp[%02d] req_bd=%u, thresh=%u, usable_bd=%lu, "
 		     "total_bd=%lu, tx_pages=%u",
diff --git a/drivers/net/bnx2x/bnx2x_rxtx.h b/drivers/net/bnx2x/bnx2x_rxtx.h
index dd251aa..2e38ec2 100644
--- a/drivers/net/bnx2x/bnx2x_rxtx.h
+++ b/drivers/net/bnx2x/bnx2x_rxtx.h
@@ -11,7 +11,7 @@ 
 #ifndef _BNX2X_RXTX_H_
 #define _BNX2X_RXTX_H_
 
-#define DEFAULT_TX_FREE_THRESH   512
+#define DEFAULT_TX_FREE_THRESH   64
 #define RTE_PMD_BNX2X_TX_MAX_BURST 1
 
 /**