[dpdk-dev] igb: fix i350 VF RX issue

Message ID 1459476534-7624-1-git-send-email-wenzhuo.lu@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Wenzhuo Lu April 1, 2016, 2:08 a.m. UTC
  A problem is found on i350 VF. We found TX will happen once
per 4 packets. If only 1~3 packets are received, they will
not be forwarded. But the real problem is on RX side. The
reason is the default RX write-back threshold is changed to
4, so every first 3 packets may be hung there.

This patch checks the RX wthresh when setting up the RX
queue, and forces it to be 1, so every packet can be handled
immediately.

Fixes: 4a41c17dba18 (igb: set default thresholds based on MAC type)
---
 drivers/net/e1000/igb_rxtx.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Ananyev, Konstantin April 1, 2016, 12:28 p.m. UTC | #1
> -----Original Message-----
> From: Lu, Wenzhuo
> Sent: Friday, April 01, 2016 3:09 AM
> To: dev@dpdk.org
> Cc: Ananyev, Konstantin
> Subject: [PATCH] igb: fix i350 VF RX issue
> 
> A problem is found on i350 VF. We found TX will happen once
> per 4 packets. If only 1~3 packets are received, they will
> not be forwarded. But the real problem is on RX side. The
> reason is the default RX write-back threshold is changed to
> 4, so every first 3 packets may be hung there.
> 
> This patch checks the RX wthresh when setting up the RX
> queue, and forces it to be 1, so every packet can be handled
> immediately.
> 
> Fixes: 4a41c17dba18 (igb: set default thresholds based on MAC type)
> ---
>  drivers/net/e1000/igb_rxtx.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c
> index 529dba4..4a987e3 100644
> --- a/drivers/net/e1000/igb_rxtx.c
> +++ b/drivers/net/e1000/igb_rxtx.c
> @@ -1466,7 +1466,8 @@ eth_igb_rx_queue_setup(struct rte_eth_dev *dev,
>  	rxq->pthresh = rx_conf->rx_thresh.pthresh;
>  	rxq->hthresh = rx_conf->rx_thresh.hthresh;
>  	rxq->wthresh = rx_conf->rx_thresh.wthresh;
> -	if (rxq->wthresh > 0 && hw->mac.type == e1000_82576)
> +	if (rxq->wthresh > 0 &&
> +	    (hw->mac.type == e1000_82576 || hw->mac.type == e1000_vfadapt_i350))
>  		rxq->wthresh = 1;
>  	rxq->drop_en = rx_conf->rx_drop_en;
>  	rxq->rx_free_thresh = rx_conf->rx_free_thresh;
> --

 Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>

> 1.9.3
  
Thomas Monjalon April 1, 2016, 1:43 p.m. UTC | #2
2016-04-01 10:08, Wenzhuo Lu:
> A problem is found on i350 VF. We found TX will happen once
> per 4 packets. If only 1~3 packets are received, they will
> not be forwarded. But the real problem is on RX side. The
> reason is the default RX write-back threshold is changed to
> 4, so every first 3 packets may be hung there.
> 
> This patch checks the RX wthresh when setting up the RX
> queue, and forces it to be 1, so every packet can be handled
> immediately.
> 
> Fixes: 4a41c17dba18 (igb: set default thresholds based on MAC type)
> ---
>  drivers/net/e1000/igb_rxtx.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Missing Signed-off-by
  
Wenzhuo Lu April 5, 2016, 12:49 a.m. UTC | #3
Hi Thomas,

> 
> Missing Signed-off-by
Sorry for this mistake, will correct it with a V2.
  

Patch

diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c
index 529dba4..4a987e3 100644
--- a/drivers/net/e1000/igb_rxtx.c
+++ b/drivers/net/e1000/igb_rxtx.c
@@ -1466,7 +1466,8 @@  eth_igb_rx_queue_setup(struct rte_eth_dev *dev,
 	rxq->pthresh = rx_conf->rx_thresh.pthresh;
 	rxq->hthresh = rx_conf->rx_thresh.hthresh;
 	rxq->wthresh = rx_conf->rx_thresh.wthresh;
-	if (rxq->wthresh > 0 && hw->mac.type == e1000_82576)
+	if (rxq->wthresh > 0 &&
+	    (hw->mac.type == e1000_82576 || hw->mac.type == e1000_vfadapt_i350))
 		rxq->wthresh = 1;
 	rxq->drop_en = rx_conf->rx_drop_en;
 	rxq->rx_free_thresh = rx_conf->rx_free_thresh;