patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH] net/ixgbe: fix configuration of max frame size
@ 2021-01-14 10:14 Zhang,Alvin
  2021-01-15  2:31 ` [dpdk-stable] [PATCH v2] " Zhang,Alvin
  0 siblings, 1 reply; 15+ messages in thread
From: Zhang,Alvin @ 2021-01-14 10:14 UTC (permalink / raw)
  To: jia.guo, haiyue.wang; +Cc: dev, Alvin Zhang, stable

From: Alvin Zhang <alvinx.zhang@intel.com>

For 82599 NIC, jumbo frame feature is not supported in IOV mode,
but if a VF requests to configure the frame size to that not
bigger than RTE_ETHER_MAX_LEN, the PMD should not return -1.
This patch keeps ixgbe PMD's handling mode consistent with kernel
driver in above situation.

In addition, the value set by the command IXGBE_VF_SET_LPE
represents the max frame size, not the mtu.

Fixes: 1b9ea09c067b ("ixgbe: support X550")
Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
Cc: stable@dpdk.org

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
---
 drivers/net/ixgbe/ixgbe_pf.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 833863a..b4282fd 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -555,27 +555,30 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf, uint32_t *msgbuf)
 {
 	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t new_mtu = msgbuf[1];
-	uint32_t max_frs;
+	uint32_t max_frame = msgbuf[1];
+	uint32_t cur_frame_size;
 	uint32_t hlreg0;
-	int max_frame = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
 	/* X540 and X550 support jumbo frames in IOV mode */
 	if (hw->mac.type != ixgbe_mac_X540 &&
 		hw->mac.type != ixgbe_mac_X550 &&
 		hw->mac.type != ixgbe_mac_X550EM_x &&
-		hw->mac.type != ixgbe_mac_X550EM_a)
-		return -1;
+		hw->mac.type != ixgbe_mac_X550EM_a) {
+		if (max_frame > RTE_ETHER_MAX_LEN)
+			return -1;
+
+		return 0;
+	}
 
 	if (max_frame < RTE_ETHER_MIN_LEN ||
 			max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
 		return -1;
 
-	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
-		   IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
-	if (max_frs < new_mtu) {
+	cur_frame_size = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
+			 IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
+	if (cur_frame_size < max_frame) {
 		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
-		if (new_mtu > RTE_ETHER_MAX_LEN) {
+		if (max_frame > RTE_ETHER_MAX_LEN) {
 			dev->data->dev_conf.rxmode.offloads |=
 				DEV_RX_OFFLOAD_JUMBO_FRAME;
 			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
@@ -586,8 +589,8 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 		}
 		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
 
-		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
-		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
+		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS,
+				max_frame << IXGBE_MHADD_MFS_SHIFT);
 	}
 
 	return 0;
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-stable] [PATCH v2] net/ixgbe: fix configuration of max frame size
  2021-01-14 10:14 [dpdk-stable] [PATCH] net/ixgbe: fix configuration of max frame size Zhang,Alvin
@ 2021-01-15  2:31 ` Zhang,Alvin
  2021-01-15  6:43   ` Xie, WeiX
  2021-01-15  7:00   ` [dpdk-stable] [PATCH v3] " Zhang,Alvin
  0 siblings, 2 replies; 15+ messages in thread
From: Zhang,Alvin @ 2021-01-15  2:31 UTC (permalink / raw)
  To: jia.guo, haiyue.wang, WeiX.Xie; +Cc: dev, Alvin Zhang, stable

From: Alvin Zhang <alvinx.zhang@intel.com>

For 82599 NIC, jumbo frame feature is not supported in IOV mode,
but if a VF requests to configure the frame size to that not
bigger than RTE_ETHER_MAX_LEN, the PMD should not return -1.
This patch keeps ixgbe PMD's handling mode consistent with kernel
driver in above situation.

In addition, the value set by the command IXGBE_VF_SET_LPE
represents the max frame size, not the mtu.

Fixes: 1b9ea09c067b ("ixgbe: support X550")
Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
Cc: stable@dpdk.org

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
---
 drivers/net/ixgbe/ixgbe_pf.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 833863a..4cedaa5 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -555,27 +555,30 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf, uint32_t *msgbuf)
 {
 	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t new_mtu = msgbuf[1];
-	uint32_t max_frs;
+	uint32_t max_frame = msgbuf[1];
+	uint32_t cur_frame_size;
 	uint32_t hlreg0;
-	int max_frame = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
 	/* X540 and X550 support jumbo frames in IOV mode */
 	if (hw->mac.type != ixgbe_mac_X540 &&
 		hw->mac.type != ixgbe_mac_X550 &&
 		hw->mac.type != ixgbe_mac_X550EM_x &&
-		hw->mac.type != ixgbe_mac_X550EM_a)
-		return -1;
+		hw->mac.type != ixgbe_mac_X550EM_a) {
+		if (max_frame > dev->data->dev_conf.rxmode.max_rx_pkt_len)
+			return -1;
+
+		return 0;
+	}
 
 	if (max_frame < RTE_ETHER_MIN_LEN ||
 			max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
 		return -1;
 
-	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
-		   IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
-	if (max_frs < new_mtu) {
+	cur_frame_size = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
+			 IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
+	if (cur_frame_size < max_frame) {
 		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
-		if (new_mtu > RTE_ETHER_MAX_LEN) {
+		if (max_frame > RTE_ETHER_MAX_LEN) {
 			dev->data->dev_conf.rxmode.offloads |=
 				DEV_RX_OFFLOAD_JUMBO_FRAME;
 			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
@@ -586,8 +589,8 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 		}
 		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
 
-		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
-		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
+		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS,
+				max_frame << IXGBE_MHADD_MFS_SHIFT);
 	}
 
 	return 0;
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-stable] [PATCH v2] net/ixgbe: fix configuration of max frame size
  2021-01-15  2:31 ` [dpdk-stable] [PATCH v2] " Zhang,Alvin
@ 2021-01-15  6:43   ` Xie, WeiX
  2021-01-15  7:00   ` [dpdk-stable] [PATCH v3] " Zhang,Alvin
  1 sibling, 0 replies; 15+ messages in thread
From: Xie, WeiX @ 2021-01-15  6:43 UTC (permalink / raw)
  To: Zhang, AlvinX, Guo, Jia, Wang, Haiyue; +Cc: dev, Zhang, AlvinX, stable

Tested-by:  Xie,WeiX < weix.xie@intel.com>

Regards,
Xie Wei


> -----Original Message-----
> From: Zhang,Alvin [mailto:alvinx.zhang@intel.com]
> Sent: Friday, January 15, 2021 10:31 AM
> To: Guo, Jia <jia.guo@intel.com>; Wang, Haiyue <haiyue.wang@intel.com>;
> Xie, WeiX <weix.xie@intel.com>
> Cc: dev@dpdk.org; Zhang, AlvinX <alvinx.zhang@intel.com>;
> stable@dpdk.org
> Subject: [PATCH v2] net/ixgbe: fix configuration of max frame size
> 
> From: Alvin Zhang <alvinx.zhang@intel.com>
> 
> For 82599 NIC, jumbo frame feature is not supported in IOV mode, but if a VF
> requests to configure the frame size to that not bigger than
> RTE_ETHER_MAX_LEN, the PMD should not return -1.
> This patch keeps ixgbe PMD's handling mode consistent with kernel driver in
> above situation.
> 
> In addition, the value set by the command IXGBE_VF_SET_LPE represents
> the max frame size, not the mtu.
> 
> Fixes: 1b9ea09c067b ("ixgbe: support X550")
> Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
> ---
>  drivers/net/ixgbe/ixgbe_pf.c | 25 ++++++++++++++-----------
>  1 file changed, 14 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
> index 833863a..4cedaa5 100644
> --- a/drivers/net/ixgbe/ixgbe_pf.c
> +++ b/drivers/net/ixgbe/ixgbe_pf.c
> @@ -555,27 +555,30 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)  ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused
> uint32_t vf, uint32_t *msgbuf)  {
>  	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> -	uint32_t new_mtu = msgbuf[1];
> -	uint32_t max_frs;
> +	uint32_t max_frame = msgbuf[1];
> +	uint32_t cur_frame_size;
>  	uint32_t hlreg0;
> -	int max_frame = new_mtu + RTE_ETHER_HDR_LEN +
> RTE_ETHER_CRC_LEN;
> 
>  	/* X540 and X550 support jumbo frames in IOV mode */
>  	if (hw->mac.type != ixgbe_mac_X540 &&
>  		hw->mac.type != ixgbe_mac_X550 &&
>  		hw->mac.type != ixgbe_mac_X550EM_x &&
> -		hw->mac.type != ixgbe_mac_X550EM_a)
> -		return -1;
> +		hw->mac.type != ixgbe_mac_X550EM_a) {
> +		if (max_frame > dev->data-
> >dev_conf.rxmode.max_rx_pkt_len)
> +			return -1;
> +
> +		return 0;
> +	}
> 
>  	if (max_frame < RTE_ETHER_MIN_LEN ||
>  			max_frame >
> RTE_ETHER_MAX_JUMBO_FRAME_LEN)
>  		return -1;
> 
> -	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
> -		   IXGBE_MHADD_MFS_MASK) >>
> IXGBE_MHADD_MFS_SHIFT;
> -	if (max_frs < new_mtu) {
> +	cur_frame_size = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
> +			 IXGBE_MHADD_MFS_MASK) >>
> IXGBE_MHADD_MFS_SHIFT;
> +	if (cur_frame_size < max_frame) {
>  		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
> -		if (new_mtu > RTE_ETHER_MAX_LEN) {
> +		if (max_frame > RTE_ETHER_MAX_LEN) {
>  			dev->data->dev_conf.rxmode.offloads |=
>  				DEV_RX_OFFLOAD_JUMBO_FRAME;
>  			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
> @@ -586,8 +589,8 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)
>  		}
>  		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
> 
> -		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
> -		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
> +		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS,
> +				max_frame << IXGBE_MHADD_MFS_SHIFT);
>  	}
> 
>  	return 0;
> --
> 1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-stable] [PATCH v3] net/ixgbe: fix configuration of max frame size
  2021-01-15  2:31 ` [dpdk-stable] [PATCH v2] " Zhang,Alvin
  2021-01-15  6:43   ` Xie, WeiX
@ 2021-01-15  7:00   ` Zhang,Alvin
  2021-01-15  7:34     ` Xie, WeiX
                       ` (2 more replies)
  1 sibling, 3 replies; 15+ messages in thread
From: Zhang,Alvin @ 2021-01-15  7:00 UTC (permalink / raw)
  To: jia.guo, haiyue.wang, WeiX.Xie; +Cc: dev, Alvin Zhang, stable

From: Alvin Zhang <alvinx.zhang@intel.com>

For 82599 NIC, jumbo frame feature is not supported in IOV mode,
but if a VF requests to configure the frame size to that not
bigger than RTE_ETHER_MAX_LEN, the PMD should not return -1.
This patch keeps ixgbe PMD's handling mode consistent with kernel
driver in above situation.

In addition, the value set by the command IXGBE_VF_SET_LPE
represents the max frame size, not the mtu.

Fixes: 1b9ea09c067b ("ixgbe: support X550")
Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
Cc: stable@dpdk.org

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
---

V3: Restore variable name from cur_frame_size to max_frs.
---
 drivers/net/ixgbe/ixgbe_pf.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 833863a..1ffde56 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -555,17 +555,20 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf, uint32_t *msgbuf)
 {
 	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t new_mtu = msgbuf[1];
+	uint32_t max_frame = msgbuf[1];
 	uint32_t max_frs;
 	uint32_t hlreg0;
-	int max_frame = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
 	/* X540 and X550 support jumbo frames in IOV mode */
 	if (hw->mac.type != ixgbe_mac_X540 &&
 		hw->mac.type != ixgbe_mac_X550 &&
 		hw->mac.type != ixgbe_mac_X550EM_x &&
-		hw->mac.type != ixgbe_mac_X550EM_a)
-		return -1;
+		hw->mac.type != ixgbe_mac_X550EM_a) {
+		if (max_frame > dev->data->dev_conf.rxmode.max_rx_pkt_len)
+			return -1;
+
+		return 0;
+	}
 
 	if (max_frame < RTE_ETHER_MIN_LEN ||
 			max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
@@ -573,9 +576,9 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 
 	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
 		   IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
-	if (max_frs < new_mtu) {
+	if (max_frs < max_frame) {
 		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
-		if (new_mtu > RTE_ETHER_MAX_LEN) {
+		if (max_frame > RTE_ETHER_MAX_LEN) {
 			dev->data->dev_conf.rxmode.offloads |=
 				DEV_RX_OFFLOAD_JUMBO_FRAME;
 			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
@@ -586,7 +589,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 		}
 		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
 
-		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
+		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
 		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
 	}
 
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-stable] [PATCH v3] net/ixgbe: fix configuration of max frame size
  2021-01-15  7:00   ` [dpdk-stable] [PATCH v3] " Zhang,Alvin
@ 2021-01-15  7:34     ` Xie, WeiX
  2021-01-15  8:15     ` Guo, Jia
  2021-01-15 10:08     ` [dpdk-stable] [PATCH v4] " Zhang,Alvin
  2 siblings, 0 replies; 15+ messages in thread
From: Xie, WeiX @ 2021-01-15  7:34 UTC (permalink / raw)
  To: Zhang, AlvinX, Guo, Jia, Wang, Haiyue; +Cc: dev, Zhang, AlvinX, stable

Tested-by:  Xie,WeiX < weix.xie@intel.com>

Regards,
Xie Wei


> -----Original Message-----
> From: Zhang,Alvin [mailto:alvinx.zhang@intel.com]
> Sent: Friday, January 15, 2021 3:00 PM
> To: Guo, Jia <jia.guo@intel.com>; Wang, Haiyue <haiyue.wang@intel.com>;
> Xie, WeiX <weix.xie@intel.com>
> Cc: dev@dpdk.org; Zhang, AlvinX <alvinx.zhang@intel.com>;
> stable@dpdk.org
> Subject: [PATCH v3] net/ixgbe: fix configuration of max frame size
> 
> From: Alvin Zhang <alvinx.zhang@intel.com>
> 
> For 82599 NIC, jumbo frame feature is not supported in IOV mode, but if a VF
> requests to configure the frame size to that not bigger than
> RTE_ETHER_MAX_LEN, the PMD should not return -1.
> This patch keeps ixgbe PMD's handling mode consistent with kernel driver in
> above situation.
> 
> In addition, the value set by the command IXGBE_VF_SET_LPE represents
> the max frame size, not the mtu.
> 
> Fixes: 1b9ea09c067b ("ixgbe: support X550")
> Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
> ---
> 
> V3: Restore variable name from cur_frame_size to max_frs.
> ---
>  drivers/net/ixgbe/ixgbe_pf.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
> index 833863a..1ffde56 100644
> --- a/drivers/net/ixgbe/ixgbe_pf.c
> +++ b/drivers/net/ixgbe/ixgbe_pf.c
> @@ -555,17 +555,20 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)  ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused
> uint32_t vf, uint32_t *msgbuf)  {
>  	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> -	uint32_t new_mtu = msgbuf[1];
> +	uint32_t max_frame = msgbuf[1];
>  	uint32_t max_frs;
>  	uint32_t hlreg0;
> -	int max_frame = new_mtu + RTE_ETHER_HDR_LEN +
> RTE_ETHER_CRC_LEN;
> 
>  	/* X540 and X550 support jumbo frames in IOV mode */
>  	if (hw->mac.type != ixgbe_mac_X540 &&
>  		hw->mac.type != ixgbe_mac_X550 &&
>  		hw->mac.type != ixgbe_mac_X550EM_x &&
> -		hw->mac.type != ixgbe_mac_X550EM_a)
> -		return -1;
> +		hw->mac.type != ixgbe_mac_X550EM_a) {
> +		if (max_frame > dev->data-
> >dev_conf.rxmode.max_rx_pkt_len)
> +			return -1;
> +
> +		return 0;
> +	}
> 
>  	if (max_frame < RTE_ETHER_MIN_LEN ||
>  			max_frame >
> RTE_ETHER_MAX_JUMBO_FRAME_LEN) @@ -573,9 +576,9 @@ int
> ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
> 
>  	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
>  		   IXGBE_MHADD_MFS_MASK) >>
> IXGBE_MHADD_MFS_SHIFT;
> -	if (max_frs < new_mtu) {
> +	if (max_frs < max_frame) {
>  		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
> -		if (new_mtu > RTE_ETHER_MAX_LEN) {
> +		if (max_frame > RTE_ETHER_MAX_LEN) {
>  			dev->data->dev_conf.rxmode.offloads |=
>  				DEV_RX_OFFLOAD_JUMBO_FRAME;
>  			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
> @@ -586,7 +589,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)
>  		}
>  		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
> 
> -		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
> +		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
>  		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
>  	}
> 
> --
> 1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-stable] [PATCH v3] net/ixgbe: fix configuration of max frame size
  2021-01-15  7:00   ` [dpdk-stable] [PATCH v3] " Zhang,Alvin
  2021-01-15  7:34     ` Xie, WeiX
@ 2021-01-15  8:15     ` Guo, Jia
  2021-01-15  9:50       ` Zhang, AlvinX
  2021-01-15 10:08     ` [dpdk-stable] [PATCH v4] " Zhang,Alvin
  2 siblings, 1 reply; 15+ messages in thread
From: Guo, Jia @ 2021-01-15  8:15 UTC (permalink / raw)
  To: Zhang, AlvinX, Wang, Haiyue, Xie, WeiX; +Cc: dev, Zhang, AlvinX, stable

Hi, Alvin

> -----Original Message-----
> From: Zhang,Alvin <alvinx.zhang@intel.com>
> Sent: Friday, January 15, 2021 3:00 PM
> To: Guo, Jia <jia.guo@intel.com>; Wang, Haiyue <haiyue.wang@intel.com>;
> Xie, WeiX <weix.xie@intel.com>
> Cc: dev@dpdk.org; Zhang, AlvinX <alvinx.zhang@intel.com>;
> stable@dpdk.org
> Subject: [PATCH v3] net/ixgbe: fix configuration of max frame size
> 
> From: Alvin Zhang <alvinx.zhang@intel.com>
> 
> For 82599 NIC, jumbo frame feature is not supported in IOV mode, but if a VF
> requests to configure the frame size to that not bigger than
> RTE_ETHER_MAX_LEN, the PMD should not return -1.
> This patch keeps ixgbe PMD's handling mode consistent with kernel driver in
> above situation.
> 

Why it should not return -1 and what is the kernel driver behaviors related with this patch?

> In addition, the value set by the command IXGBE_VF_SET_LPE represents
> the max frame size, not the mtu.
> 
> Fixes: 1b9ea09c067b ("ixgbe: support X550")
> Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
> ---
> 
> V3: Restore variable name from cur_frame_size to max_frs.
> ---
>  drivers/net/ixgbe/ixgbe_pf.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
> index 833863a..1ffde56 100644
> --- a/drivers/net/ixgbe/ixgbe_pf.c
> +++ b/drivers/net/ixgbe/ixgbe_pf.c
> @@ -555,17 +555,20 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)  ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused
> uint32_t vf, uint32_t *msgbuf)  {
>  	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> -	uint32_t new_mtu = msgbuf[1];
> +	uint32_t max_frame = msgbuf[1];
>  	uint32_t max_frs;
>  	uint32_t hlreg0;
> -	int max_frame = new_mtu + RTE_ETHER_HDR_LEN +
> RTE_ETHER_CRC_LEN;
> 
>  	/* X540 and X550 support jumbo frames in IOV mode */
>  	if (hw->mac.type != ixgbe_mac_X540 &&
>  		hw->mac.type != ixgbe_mac_X550 &&
>  		hw->mac.type != ixgbe_mac_X550EM_x &&
> -		hw->mac.type != ixgbe_mac_X550EM_a)
> -		return -1;
> +		hw->mac.type != ixgbe_mac_X550EM_a) {
> +		if (max_frame > dev->data-
> >dev_conf.rxmode.max_rx_pkt_len)

This condition is only for X540/X550?

> +			return -1;
> +
> +		return 0;
> +	}
> 

Assume that return 0 means success to set vf lpe, return -1 means failed to set vf lpe. If it is not support in VF, why return 0?

>  	if (max_frame < RTE_ETHER_MIN_LEN ||
>  			max_frame >
> RTE_ETHER_MAX_JUMBO_FRAME_LEN) @@ -573,9 +576,9 @@ int
> ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
> 
>  	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
>  		   IXGBE_MHADD_MFS_MASK) >>
> IXGBE_MHADD_MFS_SHIFT;
> -	if (max_frs < new_mtu) {
> +	if (max_frs < max_frame) {
>  		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
> -		if (new_mtu > RTE_ETHER_MAX_LEN) {
> +		if (max_frame > RTE_ETHER_MAX_LEN) {
>  			dev->data->dev_conf.rxmode.offloads |=
>  				DEV_RX_OFFLOAD_JUMBO_FRAME;
>  			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
> @@ -586,7 +589,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)
>  		}
>  		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
> 
> -		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
> +		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
>  		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
>  	}
> 
> --
> 1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-stable] [PATCH v3] net/ixgbe: fix configuration of max frame size
  2021-01-15  8:15     ` Guo, Jia
@ 2021-01-15  9:50       ` Zhang, AlvinX
  0 siblings, 0 replies; 15+ messages in thread
From: Zhang, AlvinX @ 2021-01-15  9:50 UTC (permalink / raw)
  To: Guo, Jia, Wang, Haiyue, Xie, WeiX; +Cc: dev, stable

Hi Guojia,
Thanks for you reply.

I will modify as we discussion.

> -----Original Message-----
> From: Guo, Jia <jia.guo@intel.com>
> Sent: Friday, January 15, 2021 4:15 PM
> To: Zhang, AlvinX <alvinx.zhang@intel.com>; Wang, Haiyue
> <haiyue.wang@intel.com>; Xie, WeiX <weix.xie@intel.com>
> Cc: dev@dpdk.org; Zhang, AlvinX <alvinx.zhang@intel.com>; stable@dpdk.org
> Subject: RE: [PATCH v3] net/ixgbe: fix configuration of max frame size
> 
> Hi, Alvin
> 
> > -----Original Message-----
> > From: Zhang,Alvin <alvinx.zhang@intel.com>
> > Sent: Friday, January 15, 2021 3:00 PM
> > To: Guo, Jia <jia.guo@intel.com>; Wang, Haiyue
> > <haiyue.wang@intel.com>; Xie, WeiX <weix.xie@intel.com>
> > Cc: dev@dpdk.org; Zhang, AlvinX <alvinx.zhang@intel.com>;
> > stable@dpdk.org
> > Subject: [PATCH v3] net/ixgbe: fix configuration of max frame size
> >
> > From: Alvin Zhang <alvinx.zhang@intel.com>
> >
> > For 82599 NIC, jumbo frame feature is not supported in IOV mode, but
> > if a VF requests to configure the frame size to that not bigger than
> > RTE_ETHER_MAX_LEN, the PMD should not return -1.
> > This patch keeps ixgbe PMD's handling mode consistent with kernel
> > driver in above situation.
> >
> 
> Why it should not return -1 and what is the kernel driver behaviors related with
> this patch?
> 
> > In addition, the value set by the command IXGBE_VF_SET_LPE represents
> > the max frame size, not the mtu.
> >
> > Fixes: 1b9ea09c067b ("ixgbe: support X550")
> > Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
> > ---
> >
> > V3: Restore variable name from cur_frame_size to max_frs.
> > ---
> >  drivers/net/ixgbe/ixgbe_pf.c | 17 ++++++++++-------
> >  1 file changed, 10 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/net/ixgbe/ixgbe_pf.c
> > b/drivers/net/ixgbe/ixgbe_pf.c index 833863a..1ffde56 100644
> > --- a/drivers/net/ixgbe/ixgbe_pf.c
> > +++ b/drivers/net/ixgbe/ixgbe_pf.c
> > @@ -555,17 +555,20 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> > *eth_dev)  ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused
> > uint32_t vf, uint32_t *msgbuf)  {  struct ixgbe_hw *hw =
> > IXGBE_DEV_PRIVATE_TO_HW(dev->data-
> > >dev_private);
> > -uint32_t new_mtu = msgbuf[1];
> > +uint32_t max_frame = msgbuf[1];
> >  uint32_t max_frs;
> >  uint32_t hlreg0;
> > -int max_frame = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
> >
> >  /* X540 and X550 support jumbo frames in IOV mode */  if
> > (hw->mac.type != ixgbe_mac_X540 &&  hw->mac.type != ixgbe_mac_X550
> &&
> > hw->mac.type != ixgbe_mac_X550EM_x &&
> > -hw->mac.type != ixgbe_mac_X550EM_a)
> > -return -1;
> > +hw->mac.type != ixgbe_mac_X550EM_a) {
> > +if (max_frame > dev->data-
> > >dev_conf.rxmode.max_rx_pkt_len)
> 
> This condition is only for X540/X550?
> 
> > +return -1;
> > +
> > +return 0;
> > +}
> >
> 
> Assume that return 0 means success to set vf lpe, return -1 means failed to set vf
> lpe. If it is not support in VF, why return 0?
> 
> >  if (max_frame < RTE_ETHER_MIN_LEN ||
> >  max_frame >
> > RTE_ETHER_MAX_JUMBO_FRAME_LEN) @@ -573,9 +576,9 @@ int
> > ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
> >
> >  max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
> >     IXGBE_MHADD_MFS_MASK) >>
> > IXGBE_MHADD_MFS_SHIFT;
> > -if (max_frs < new_mtu) {
> > +if (max_frs < max_frame) {
> >  hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0); -if (new_mtu >
> > RTE_ETHER_MAX_LEN) {
> > +if (max_frame > RTE_ETHER_MAX_LEN) {
> >  dev->data->dev_conf.rxmode.offloads |=
> DEV_RX_OFFLOAD_JUMBO_FRAME;
> >  hlreg0 |= IXGBE_HLREG0_JUMBOEN;
> > @@ -586,7 +589,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> > *eth_dev)
> >  }
> >  IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
> >
> > -max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
> > +max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
> >  IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);  }
> >
> > --
> > 1.8.3.1
> 


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-stable] [PATCH v4] net/ixgbe: fix configuration of max frame size
  2021-01-15  7:00   ` [dpdk-stable] [PATCH v3] " Zhang,Alvin
  2021-01-15  7:34     ` Xie, WeiX
  2021-01-15  8:15     ` Guo, Jia
@ 2021-01-15 10:08     ` Zhang,Alvin
  2021-01-18  5:03       ` [dpdk-stable] [PATCH v5] " Zhang,Alvin
  2 siblings, 1 reply; 15+ messages in thread
From: Zhang,Alvin @ 2021-01-15 10:08 UTC (permalink / raw)
  To: jia.guo, WeiX.Xie, haiyue.wang; +Cc: dev, Alvin Zhang, stable

From: Alvin Zhang <alvinx.zhang@intel.com>

For 82599 NIC, jumbo frame feature is not supported in IOV mode,
if a VF requests to configure the max frame size to that not
bigger than RTE_ETHER_MAX_LEN, the kernel driver returns 0, but
the DPDK ixgbe PMD returens -1, this will cause the VF to fail
to start when the PF driven by DPDK ixgbe PMD.

This patch keeps ixgbe PMD's handling mode consistent with kernel
driver in above situation.

In addition, the value set by the command IXGBE_VF_SET_LPE
represents the max frame size, not the mtu.

Fixes: 1b9ea09c067b ("ixgbe: support X550")
Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
Cc: stable@dpdk.org

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
---

V3: Restore variable name from cur_frame_size to max_frs.
V4: Update git log and add notes.
---
 drivers/net/ixgbe/ixgbe_pf.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 833863a..911a145 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -555,17 +555,26 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf, uint32_t *msgbuf)
 {
 	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t new_mtu = msgbuf[1];
+	uint32_t max_frame = msgbuf[1];
 	uint32_t max_frs;
 	uint32_t hlreg0;
-	int max_frame = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
 	/* X540 and X550 support jumbo frames in IOV mode */
 	if (hw->mac.type != ixgbe_mac_X540 &&
 		hw->mac.type != ixgbe_mac_X550 &&
 		hw->mac.type != ixgbe_mac_X550EM_x &&
-		hw->mac.type != ixgbe_mac_X550EM_a)
-		return -1;
+		hw->mac.type != ixgbe_mac_X550EM_a) {
+		/**
+		 * For Other NICs, set max packet length is not enabled,
+		 * but if the value is not bigger than that has been set
+		 * by PF, here return -1 will cause the VF to fail to
+		 * start.
+		 */
+		if (max_frame > dev->data->dev_conf.rxmode.max_rx_pkt_len)
+			return -1;
+
+		return 0;
+	}
 
 	if (max_frame < RTE_ETHER_MIN_LEN ||
 			max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
@@ -573,9 +582,9 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 
 	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
 		   IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
-	if (max_frs < new_mtu) {
+	if (max_frs < max_frame) {
 		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
-		if (new_mtu > RTE_ETHER_MAX_LEN) {
+		if (max_frame > RTE_ETHER_MAX_LEN) {
 			dev->data->dev_conf.rxmode.offloads |=
 				DEV_RX_OFFLOAD_JUMBO_FRAME;
 			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
@@ -586,7 +595,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 		}
 		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
 
-		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
+		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
 		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
 	}
 
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-stable] [PATCH v5] net/ixgbe: fix configuration of max frame size
  2021-01-15 10:08     ` [dpdk-stable] [PATCH v4] " Zhang,Alvin
@ 2021-01-18  5:03       ` Zhang,Alvin
  2021-01-18  5:58         ` Xie, WeiX
  2021-01-18  8:35         ` [dpdk-stable] [PATCH v6] " Zhang,Alvin
  0 siblings, 2 replies; 15+ messages in thread
From: Zhang,Alvin @ 2021-01-18  5:03 UTC (permalink / raw)
  To: jia.guo, WeiX.Xie, haiyue.wang; +Cc: dev, Alvin Zhang, stable

From: Alvin Zhang <alvinx.zhang@intel.com>

For some types of NIC, jumbo frame is not supported in IOV mode,
so if a VF requests to configure the frame size to not bigger
than RTE_ETHER_MAX_LEN, the kernel driver returns 0, but the DPDK
ixgbe PMD returens -1, this will cause the VF to fail to start
when the PF driven by DPDK ixgbe PMD.

This patch keeps ixgbe PMD's handling mode consistent with kernel
driver in above situation.

In addition, the value set by the command IXGBE_VF_SET_LPE
represents the max frame size, not the mtu.

Fixes: 1b9ea09c067b ("ixgbe: support X550")
Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
Cc: stable@dpdk.org

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
---

V3: Restore variable name from cur_frame_size to max_frs.
V4: Update git log and add notes.
V5: Add check for VF api version.
---
 drivers/net/ixgbe/ixgbe_pf.c | 43 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 35 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 833863a..793f970 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -552,20 +552,47 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 }
 
 static int
-ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf, uint32_t *msgbuf)
+ixgbe_set_vf_lpe(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
 {
 	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t new_mtu = msgbuf[1];
+	uint32_t max_frame = msgbuf[1];
 	uint32_t max_frs;
 	uint32_t hlreg0;
-	int max_frame = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
 	/* X540 and X550 support jumbo frames in IOV mode */
 	if (hw->mac.type != ixgbe_mac_X540 &&
 		hw->mac.type != ixgbe_mac_X550 &&
 		hw->mac.type != ixgbe_mac_X550EM_x &&
-		hw->mac.type != ixgbe_mac_X550EM_a)
-		return -1;
+		hw->mac.type != ixgbe_mac_X550EM_a) {
+		struct ixgbe_vf_info *vfinfo =
+			*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private);
+
+		switch (vfinfo[vf].api_version) {
+		case ixgbe_mbox_api_11:
+		case ixgbe_mbox_api_12:
+		case ixgbe_mbox_api_13:
+			 /**
+			  * Version 1.1 supports jumbo frames on VFs if PF has
+			  * jumbo frames enabled which means legacy VFs are
+			  * disabled
+			  */
+			if (dev->data->dev_conf.rxmode.max_rx_pkt_len >
+			    RTE_ETHER_MAX_LEN)
+				break;
+			/* fall through */
+		default:
+			/**
+			 * If the PF or VF are running jumbo frames enabled,
+			 * return -1 since cannot support jumbo frames on
+			 * legacy VFs.
+			 */
+			if (max_frame > RTE_ETHER_MAX_LEN ||
+			    dev->data->dev_conf.rxmode.max_rx_pkt_len >
+			    RTE_ETHER_MAX_LEN)
+				return -1;
+			break;
+		}
+	}
 
 	if (max_frame < RTE_ETHER_MIN_LEN ||
 			max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
@@ -573,9 +600,9 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 
 	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
 		   IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
-	if (max_frs < new_mtu) {
+	if (max_frs < max_frame) {
 		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
-		if (new_mtu > RTE_ETHER_MAX_LEN) {
+		if (max_frame > RTE_ETHER_MAX_LEN) {
 			dev->data->dev_conf.rxmode.offloads |=
 				DEV_RX_OFFLOAD_JUMBO_FRAME;
 			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
@@ -586,7 +613,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 		}
 		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
 
-		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
+		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
 		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
 	}
 
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-stable] [PATCH v5] net/ixgbe: fix configuration of max frame size
  2021-01-18  5:03       ` [dpdk-stable] [PATCH v5] " Zhang,Alvin
@ 2021-01-18  5:58         ` Xie, WeiX
  2021-01-18  8:35         ` [dpdk-stable] [PATCH v6] " Zhang,Alvin
  1 sibling, 0 replies; 15+ messages in thread
From: Xie, WeiX @ 2021-01-18  5:58 UTC (permalink / raw)
  To: Zhang, AlvinX, Guo, Jia, Wang, Haiyue; +Cc: dev, Zhang, AlvinX, stable

Tested-by:  Xie,WeiX < weix.xie@intel.com>

Regards,
Xie Wei

> -----Original Message-----
> From: Zhang,Alvin [mailto:alvinx.zhang@intel.com]
> Sent: Monday, January 18, 2021 1:04 PM
> To: Guo, Jia <jia.guo@intel.com>; Xie, WeiX <weix.xie@intel.com>; Wang,
> Haiyue <haiyue.wang@intel.com>
> Cc: dev@dpdk.org; Zhang, AlvinX <alvinx.zhang@intel.com>;
> stable@dpdk.org
> Subject: [PATCH v5] net/ixgbe: fix configuration of max frame size
> 
> From: Alvin Zhang <alvinx.zhang@intel.com>
> 
> For some types of NIC, jumbo frame is not supported in IOV mode, so if a VF
> requests to configure the frame size to not bigger than
> RTE_ETHER_MAX_LEN, the kernel driver returns 0, but the DPDK ixgbe PMD
> returens -1, this will cause the VF to fail to start when the PF driven by DPDK
> ixgbe PMD.
> 
> This patch keeps ixgbe PMD's handling mode consistent with kernel driver in
> above situation.
> 
> In addition, the value set by the command IXGBE_VF_SET_LPE represents
> the max frame size, not the mtu.
> 
> Fixes: 1b9ea09c067b ("ixgbe: support X550")
> Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
> ---
> 
> V3: Restore variable name from cur_frame_size to max_frs.
> V4: Update git log and add notes.
> V5: Add check for VF api version.
> ---
>  drivers/net/ixgbe/ixgbe_pf.c | 43
> +++++++++++++++++++++++++++++++++++--------
>  1 file changed, 35 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
> index 833863a..793f970 100644
> --- a/drivers/net/ixgbe/ixgbe_pf.c
> +++ b/drivers/net/ixgbe/ixgbe_pf.c
> @@ -552,20 +552,47 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)  }
> 
>  static int
> -ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf,
> uint32_t *msgbuf)
> +ixgbe_set_vf_lpe(struct rte_eth_dev *dev, uint32_t vf, uint32_t
> +*msgbuf)
>  {
>  	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> -	uint32_t new_mtu = msgbuf[1];
> +	uint32_t max_frame = msgbuf[1];
>  	uint32_t max_frs;
>  	uint32_t hlreg0;
> -	int max_frame = new_mtu + RTE_ETHER_HDR_LEN +
> RTE_ETHER_CRC_LEN;
> 
>  	/* X540 and X550 support jumbo frames in IOV mode */
>  	if (hw->mac.type != ixgbe_mac_X540 &&
>  		hw->mac.type != ixgbe_mac_X550 &&
>  		hw->mac.type != ixgbe_mac_X550EM_x &&
> -		hw->mac.type != ixgbe_mac_X550EM_a)
> -		return -1;
> +		hw->mac.type != ixgbe_mac_X550EM_a) {
> +		struct ixgbe_vf_info *vfinfo =
> +			*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data-
> >dev_private);
> +
> +		switch (vfinfo[vf].api_version) {
> +		case ixgbe_mbox_api_11:
> +		case ixgbe_mbox_api_12:
> +		case ixgbe_mbox_api_13:
> +			 /**
> +			  * Version 1.1 supports jumbo frames on VFs if PF
> has
> +			  * jumbo frames enabled which means legacy VFs
> are
> +			  * disabled
> +			  */
> +			if (dev->data->dev_conf.rxmode.max_rx_pkt_len >
> +			    RTE_ETHER_MAX_LEN)
> +				break;
> +			/* fall through */
> +		default:
> +			/**
> +			 * If the PF or VF are running jumbo frames enabled,
> +			 * return -1 since cannot support jumbo frames on
> +			 * legacy VFs.
> +			 */
> +			if (max_frame > RTE_ETHER_MAX_LEN ||
> +			    dev->data->dev_conf.rxmode.max_rx_pkt_len >
> +			    RTE_ETHER_MAX_LEN)
> +				return -1;
> +			break;
> +		}
> +	}
> 
>  	if (max_frame < RTE_ETHER_MIN_LEN ||
>  			max_frame >
> RTE_ETHER_MAX_JUMBO_FRAME_LEN) @@ -573,9 +600,9 @@ int
> ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
> 
>  	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
>  		   IXGBE_MHADD_MFS_MASK) >>
> IXGBE_MHADD_MFS_SHIFT;
> -	if (max_frs < new_mtu) {
> +	if (max_frs < max_frame) {
>  		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
> -		if (new_mtu > RTE_ETHER_MAX_LEN) {
> +		if (max_frame > RTE_ETHER_MAX_LEN) {
>  			dev->data->dev_conf.rxmode.offloads |=
>  				DEV_RX_OFFLOAD_JUMBO_FRAME;
>  			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
> @@ -586,7 +613,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)
>  		}
>  		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
> 
> -		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
> +		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
>  		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
>  	}
> 
> --
> 1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-stable] [PATCH v6] net/ixgbe: fix configuration of max frame size
  2021-01-18  5:03       ` [dpdk-stable] [PATCH v5] " Zhang,Alvin
  2021-01-18  5:58         ` Xie, WeiX
@ 2021-01-18  8:35         ` Zhang,Alvin
  2021-01-18  8:37           ` Guo, Jia
  2021-01-19  5:25           ` [dpdk-stable] [PATCH v7] " Zhang,Alvin
  1 sibling, 2 replies; 15+ messages in thread
From: Zhang,Alvin @ 2021-01-18  8:35 UTC (permalink / raw)
  To: jia.guo, WeiX.Xie, haiyue.wang; +Cc: dev, Alvin Zhang, stable

From: Alvin Zhang <alvinx.zhang@intel.com>

For some types of NIC, jumbo frame is not supported in IOV mode,
so if a VF requests to configure the frame size to not bigger
than RTE_ETHER_MAX_LEN, the kernel driver returns 0, but the DPDK
ixgbe PMD returens -1, this will cause the VF to fail to start
when the PF driven by DPDK ixgbe PMD.

This patch keeps ixgbe PMD's handling mode consistent with kernel
driver in above situation.

In addition, the value set by the command IXGBE_VF_SET_LPE
represents the max frame size, not the mtu.

Fixes: 1b9ea09c067b ("ixgbe: support X550")
Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
Cc: stable@dpdk.org

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
---

V3: Restore variable name from cur_frame_size to max_frs.
V4: Update git log and add notes.
V5: Add check for VF api version.
V6: Update notes.
---
 drivers/net/ixgbe/ixgbe_pf.c | 43 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 35 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 833863a..2762995 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -552,20 +552,47 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 }
 
 static int
-ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf, uint32_t *msgbuf)
+ixgbe_set_vf_lpe(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
 {
 	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t new_mtu = msgbuf[1];
+	uint32_t max_frame = msgbuf[1];
 	uint32_t max_frs;
 	uint32_t hlreg0;
-	int max_frame = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
 	/* X540 and X550 support jumbo frames in IOV mode */
 	if (hw->mac.type != ixgbe_mac_X540 &&
 		hw->mac.type != ixgbe_mac_X550 &&
 		hw->mac.type != ixgbe_mac_X550EM_x &&
-		hw->mac.type != ixgbe_mac_X550EM_a)
-		return -1;
+		hw->mac.type != ixgbe_mac_X550EM_a) {
+		struct ixgbe_vf_info *vfinfo =
+			*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private);
+
+		switch (vfinfo[vf].api_version) {
+		case ixgbe_mbox_api_11:
+		case ixgbe_mbox_api_12:
+		case ixgbe_mbox_api_13:
+			 /**
+			  * Version 1.1&1.2&1.3 supports jumbo frames on VFs
+			  * if PF has jumbo frames enabled which means legacy
+			  * VFs are disabled.
+			  */
+			if (dev->data->dev_conf.rxmode.max_rx_pkt_len >
+			    RTE_ETHER_MAX_LEN)
+				break;
+			/* fall through */
+		default:
+			/**
+			 * If the PF or VF are running w/ jumbo frames enabled,
+			 * we return -1 as we cannot support jumbo frames on
+			 * legacy VFs.
+			 */
+			if (max_frame > RTE_ETHER_MAX_LEN ||
+			    dev->data->dev_conf.rxmode.max_rx_pkt_len >
+			    RTE_ETHER_MAX_LEN)
+				return -1;
+			break;
+		}
+	}
 
 	if (max_frame < RTE_ETHER_MIN_LEN ||
 			max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
@@ -573,9 +600,9 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 
 	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
 		   IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
-	if (max_frs < new_mtu) {
+	if (max_frs < max_frame) {
 		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
-		if (new_mtu > RTE_ETHER_MAX_LEN) {
+		if (max_frame > RTE_ETHER_MAX_LEN) {
 			dev->data->dev_conf.rxmode.offloads |=
 				DEV_RX_OFFLOAD_JUMBO_FRAME;
 			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
@@ -586,7 +613,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 		}
 		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
 
-		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
+		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
 		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
 	}
 
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-stable] [PATCH v6] net/ixgbe: fix configuration of max frame size
  2021-01-18  8:35         ` [dpdk-stable] [PATCH v6] " Zhang,Alvin
@ 2021-01-18  8:37           ` Guo, Jia
  2021-01-19  5:25           ` [dpdk-stable] [PATCH v7] " Zhang,Alvin
  1 sibling, 0 replies; 15+ messages in thread
From: Guo, Jia @ 2021-01-18  8:37 UTC (permalink / raw)
  To: Zhang, AlvinX, Xie, WeiX, Wang, Haiyue; +Cc: dev, Zhang, AlvinX, stable

Acked-by: Jeff Guo <jia.guo@intel.com>

> -----Original Message-----
> From: Zhang,Alvin <alvinx.zhang@intel.com>
> Sent: Monday, January 18, 2021 4:35 PM
> To: Guo, Jia <jia.guo@intel.com>; Xie, WeiX <weix.xie@intel.com>; Wang,
> Haiyue <haiyue.wang@intel.com>
> Cc: dev@dpdk.org; Zhang, AlvinX <alvinx.zhang@intel.com>;
> stable@dpdk.org
> Subject: [PATCH v6] net/ixgbe: fix configuration of max frame size
> 
> From: Alvin Zhang <alvinx.zhang@intel.com>
> 
> For some types of NIC, jumbo frame is not supported in IOV mode, so if a VF
> requests to configure the frame size to not bigger than
> RTE_ETHER_MAX_LEN, the kernel driver returns 0, but the DPDK ixgbe PMD
> returens -1, this will cause the VF to fail to start when the PF driven by DPDK
> ixgbe PMD.
> 
> This patch keeps ixgbe PMD's handling mode consistent with kernel driver in
> above situation.
> 
> In addition, the value set by the command IXGBE_VF_SET_LPE represents
> the max frame size, not the mtu.
> 
> Fixes: 1b9ea09c067b ("ixgbe: support X550")
> Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
> ---
> 
> V3: Restore variable name from cur_frame_size to max_frs.
> V4: Update git log and add notes.
> V5: Add check for VF api version.
> V6: Update notes.
> ---
>  drivers/net/ixgbe/ixgbe_pf.c | 43
> +++++++++++++++++++++++++++++++++++--------
>  1 file changed, 35 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
> index 833863a..2762995 100644
> --- a/drivers/net/ixgbe/ixgbe_pf.c
> +++ b/drivers/net/ixgbe/ixgbe_pf.c
> @@ -552,20 +552,47 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)  }
> 
>  static int
> -ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf,
> uint32_t *msgbuf)
> +ixgbe_set_vf_lpe(struct rte_eth_dev *dev, uint32_t vf, uint32_t
> +*msgbuf)
>  {
>  	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> -	uint32_t new_mtu = msgbuf[1];
> +	uint32_t max_frame = msgbuf[1];
>  	uint32_t max_frs;
>  	uint32_t hlreg0;
> -	int max_frame = new_mtu + RTE_ETHER_HDR_LEN +
> RTE_ETHER_CRC_LEN;
> 
>  	/* X540 and X550 support jumbo frames in IOV mode */
>  	if (hw->mac.type != ixgbe_mac_X540 &&
>  		hw->mac.type != ixgbe_mac_X550 &&
>  		hw->mac.type != ixgbe_mac_X550EM_x &&
> -		hw->mac.type != ixgbe_mac_X550EM_a)
> -		return -1;
> +		hw->mac.type != ixgbe_mac_X550EM_a) {
> +		struct ixgbe_vf_info *vfinfo =
> +			*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data-
> >dev_private);
> +
> +		switch (vfinfo[vf].api_version) {
> +		case ixgbe_mbox_api_11:
> +		case ixgbe_mbox_api_12:
> +		case ixgbe_mbox_api_13:
> +			 /**
> +			  * Version 1.1&1.2&1.3 supports jumbo frames on
> VFs
> +			  * if PF has jumbo frames enabled which means
> legacy
> +			  * VFs are disabled.
> +			  */
> +			if (dev->data->dev_conf.rxmode.max_rx_pkt_len >
> +			    RTE_ETHER_MAX_LEN)
> +				break;
> +			/* fall through */
> +		default:
> +			/**
> +			 * If the PF or VF are running w/ jumbo frames
> enabled,
> +			 * we return -1 as we cannot support jumbo frames
> on
> +			 * legacy VFs.
> +			 */
> +			if (max_frame > RTE_ETHER_MAX_LEN ||
> +			    dev->data->dev_conf.rxmode.max_rx_pkt_len >
> +			    RTE_ETHER_MAX_LEN)
> +				return -1;
> +			break;
> +		}
> +	}
> 
>  	if (max_frame < RTE_ETHER_MIN_LEN ||
>  			max_frame >
> RTE_ETHER_MAX_JUMBO_FRAME_LEN) @@ -573,9 +600,9 @@ int
> ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
> 
>  	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
>  		   IXGBE_MHADD_MFS_MASK) >>
> IXGBE_MHADD_MFS_SHIFT;
> -	if (max_frs < new_mtu) {
> +	if (max_frs < max_frame) {
>  		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
> -		if (new_mtu > RTE_ETHER_MAX_LEN) {
> +		if (max_frame > RTE_ETHER_MAX_LEN) {
>  			dev->data->dev_conf.rxmode.offloads |=
>  				DEV_RX_OFFLOAD_JUMBO_FRAME;
>  			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
> @@ -586,7 +613,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev
> *eth_dev)
>  		}
>  		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
> 
> -		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
> +		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
>  		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
>  	}
> 
> --
> 1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-stable] [PATCH v7] net/ixgbe: fix configuration of max frame size
  2021-01-18  8:35         ` [dpdk-stable] [PATCH v6] " Zhang,Alvin
  2021-01-18  8:37           ` Guo, Jia
@ 2021-01-19  5:25           ` Zhang,Alvin
  2021-01-19  6:30             ` Zhang, Qi Z
  1 sibling, 1 reply; 15+ messages in thread
From: Zhang,Alvin @ 2021-01-19  5:25 UTC (permalink / raw)
  To: qi.z.zhang; +Cc: dev, Alvin Zhang, stable

From: Alvin Zhang <alvinx.zhang@intel.com>

For some types of NIC, jumbo frame is not supported in IOV mode,
so if a VF requests to configure the frame size to not bigger
than IXGBE_ETH_MAX_LEN, the kernel driver returns 0, but the DPDK
ixgbe PMD returens -1, this will cause the VF to fail to start
when the PF driven by DPDK ixgbe PMD.

This patch keeps ixgbe PMD's handling mode consistent with kernel
driver in above situation.

In addition, the value set by the command IXGBE_VF_SET_LPE
represents the max frame size, not the mtu.

Fixes: 1b9ea09c067b ("ixgbe: support X550")
Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
Cc: stable@dpdk.org

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
---

V3: Restore variable name from cur_frame_size to max_frs.
V4: Update git log and add notes.
V5: Add check for VF api version.
V6: Update notes.
V7: Fixed apply conflict issue.
---
 drivers/net/ixgbe/ixgbe_pf.c | 43 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 35 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 89698e8..15982af 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -552,20 +552,47 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 }
 
 static int
-ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf, uint32_t *msgbuf)
+ixgbe_set_vf_lpe(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
 {
 	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t new_mtu = msgbuf[1];
+	uint32_t max_frame = msgbuf[1];
 	uint32_t max_frs;
 	uint32_t hlreg0;
-	int max_frame = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
 	/* X540 and X550 support jumbo frames in IOV mode */
 	if (hw->mac.type != ixgbe_mac_X540 &&
 		hw->mac.type != ixgbe_mac_X550 &&
 		hw->mac.type != ixgbe_mac_X550EM_x &&
-		hw->mac.type != ixgbe_mac_X550EM_a)
-		return -1;
+		hw->mac.type != ixgbe_mac_X550EM_a) {
+		struct ixgbe_vf_info *vfinfo =
+			*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private);
+
+		switch (vfinfo[vf].api_version) {
+		case ixgbe_mbox_api_11:
+		case ixgbe_mbox_api_12:
+		case ixgbe_mbox_api_13:
+			 /**
+			  * Version 1.1&1.2&1.3 supports jumbo frames on VFs
+			  * if PF has jumbo frames enabled which means legacy
+			  * VFs are disabled.
+			  */
+			if (dev->data->dev_conf.rxmode.max_rx_pkt_len >
+			    IXGBE_ETH_MAX_LEN)
+				break;
+			/* fall through */
+		default:
+			/**
+			 * If the PF or VF are running w/ jumbo frames enabled,
+			 * we return -1 as we cannot support jumbo frames on
+			 * legacy VFs.
+			 */
+			if (max_frame > IXGBE_ETH_MAX_LEN ||
+			    dev->data->dev_conf.rxmode.max_rx_pkt_len >
+			    IXGBE_ETH_MAX_LEN)
+				return -1;
+			break;
+		}
+	}
 
 	if (max_frame < RTE_ETHER_MIN_LEN ||
 			max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
@@ -573,9 +600,9 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 
 	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
 		   IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
-	if (max_frs < new_mtu) {
+	if (max_frs < max_frame) {
 		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
-		if (new_mtu > IXGBE_ETH_MAX_LEN) {
+		if (max_frame > IXGBE_ETH_MAX_LEN) {
 			dev->data->dev_conf.rxmode.offloads |=
 				DEV_RX_OFFLOAD_JUMBO_FRAME;
 			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
@@ -586,7 +613,7 @@ int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev)
 		}
 		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
 
-		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
+		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
 		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
 	}
 
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-stable] [PATCH v7] net/ixgbe: fix configuration of max frame size
  2021-01-19  5:25           ` [dpdk-stable] [PATCH v7] " Zhang,Alvin
@ 2021-01-19  6:30             ` Zhang, Qi Z
  0 siblings, 0 replies; 15+ messages in thread
From: Zhang, Qi Z @ 2021-01-19  6:30 UTC (permalink / raw)
  To: Zhang, AlvinX; +Cc: dev, Zhang, AlvinX, stable



> -----Original Message-----
> From: Zhang,Alvin <alvinx.zhang@intel.com>
> Sent: Tuesday, January 19, 2021 1:26 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>
> Cc: dev@dpdk.org; Zhang, AlvinX <alvinx.zhang@intel.com>; stable@dpdk.org
> Subject: [PATCH v7] net/ixgbe: fix configuration of max frame size
> 
> From: Alvin Zhang <alvinx.zhang@intel.com>
> 
> For some types of NIC, jumbo frame is not supported in IOV mode, so if a VF
> requests to configure the frame size to not bigger than IXGBE_ETH_MAX_LEN,
> the kernel driver returns 0, but the DPDK ixgbe PMD returens -1, this will cause
> the VF to fail to start when the PF driven by DPDK ixgbe PMD.
> 
> This patch keeps ixgbe PMD's handling mode consistent with kernel driver in
> above situation.
> 
> In addition, the value set by the command IXGBE_VF_SET_LPE represents the
> max frame size, not the mtu.
> 
> Fixes: 1b9ea09c067b ("ixgbe: support X550")
> Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>

Applied to dpdk-next-net-intel.

Thanks
Qi

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-stable] [PATCH] net/ixgbe: fix configuration of max frame size
@ 2021-03-05 10:06 Alvin Zhang
  0 siblings, 0 replies; 15+ messages in thread
From: Alvin Zhang @ 2021-03-05 10:06 UTC (permalink / raw)
  To: jia.guo, yanx.xia, haiyue.wang; +Cc: stable

For some types of NIC, jumbo frame is not supported in IOV mode,
so if a VF requests to configure the frame size to not bigger
than IXGBE_ETH_MAX_LEN, the kernel driver returns 0, but the DPDK
ixgbe PMD returens -1, this will cause the VF to fail to start
when the PF driven by DPDK ixgbe PMD.

This patch keeps ixgbe PMD's handling mode consistent with kernel
driver in above situation.

In addition, the value set by the command IXGBE_VF_SET_LPE
represents the max frame size, not the mtu.

Fixes: 1b9ea09c067b ("ixgbe: support X550")
Fixes: 95a27b3ba5f5 ("net/ixgbe: enable jumbo frame for VF")
Cc: stable@dpdk.org

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
---
 drivers/net/ixgbe/ixgbe_pf.c | 52 +++++++++++++++++++++++++++++++-----
 1 file changed, 46 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index ca30be71eb..2e46e30b79 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -552,16 +552,44 @@ static int
 ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf, uint32_t *msgbuf)
 {
 	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t new_mtu = msgbuf[1];
+	uint32_t max_frame = msgbuf[1];
 	uint32_t max_frs;
-	int max_frame = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
+	uint32_t hlreg0;
 
 	/* X540 and X550 support jumbo frames in IOV mode */
 	if (hw->mac.type != ixgbe_mac_X540 &&
 		hw->mac.type != ixgbe_mac_X550 &&
 		hw->mac.type != ixgbe_mac_X550EM_x &&
-		hw->mac.type != ixgbe_mac_X550EM_a)
-		return -1;
+		hw->mac.type != ixgbe_mac_X550EM_a) {
+		struct ixgbe_vf_info *vfinfo =
+			*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private);
+
+		switch (vfinfo[vf].api_version) {
+		case ixgbe_mbox_api_11:
+		case ixgbe_mbox_api_12:
+		case ixgbe_mbox_api_13:
+			 /**
+			  * Version 1.1&1.2&1.3 supports jumbo frames on VFs
+			  * if PF has jumbo frames enabled which means legacy
+			  * VFs are disabled.
+			  */
+			if (dev->data->dev_conf.rxmode.max_rx_pkt_len >
+			    IXGBE_ETH_MAX_LEN)
+				break;
+			/* fall through */
+		default:
+			/**
+			 * If the PF or VF are running w/ jumbo frames enabled,
+			 * we return -1 as we cannot support jumbo frames on
+			 * legacy VFs.
+			 */
+			if (max_frame > IXGBE_ETH_MAX_LEN ||
+			    dev->data->dev_conf.rxmode.max_rx_pkt_len >
+			    IXGBE_ETH_MAX_LEN)
+				return -1;
+			break;
+		}
+	}
 
 	if (max_frame < RTE_ETHER_MIN_LEN ||
 			max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
@@ -569,8 +597,20 @@ ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused uint32_t vf, uint32_t *ms
 
 	max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
 		   IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
-	if (max_frs < new_mtu) {
-		max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
+	if (max_frs < max_frame) {
+		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
+		if (max_frame > IXGBE_ETH_MAX_LEN) {
+			dev->data->dev_conf.rxmode.offloads |=
+				DEV_RX_OFFLOAD_JUMBO_FRAME;
+			hlreg0 |= IXGBE_HLREG0_JUMBOEN;
+		} else {
+			dev->data->dev_conf.rxmode.offloads &=
+				~DEV_RX_OFFLOAD_JUMBO_FRAME;
+			hlreg0 &= ~IXGBE_HLREG0_JUMBOEN;
+		}
+		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
+
+		max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
 		IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
 	}
 
-- 
2.20.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2021-03-05 10:08 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-14 10:14 [dpdk-stable] [PATCH] net/ixgbe: fix configuration of max frame size Zhang,Alvin
2021-01-15  2:31 ` [dpdk-stable] [PATCH v2] " Zhang,Alvin
2021-01-15  6:43   ` Xie, WeiX
2021-01-15  7:00   ` [dpdk-stable] [PATCH v3] " Zhang,Alvin
2021-01-15  7:34     ` Xie, WeiX
2021-01-15  8:15     ` Guo, Jia
2021-01-15  9:50       ` Zhang, AlvinX
2021-01-15 10:08     ` [dpdk-stable] [PATCH v4] " Zhang,Alvin
2021-01-18  5:03       ` [dpdk-stable] [PATCH v5] " Zhang,Alvin
2021-01-18  5:58         ` Xie, WeiX
2021-01-18  8:35         ` [dpdk-stable] [PATCH v6] " Zhang,Alvin
2021-01-18  8:37           ` Guo, Jia
2021-01-19  5:25           ` [dpdk-stable] [PATCH v7] " Zhang,Alvin
2021-01-19  6:30             ` Zhang, Qi Z
2021-03-05 10:06 [dpdk-stable] [PATCH] " Alvin Zhang

patches for DPDK stable branches

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://inbox.dpdk.org/stable/0 stable/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 stable stable/ http://inbox.dpdk.org/stable \
		stable@dpdk.org
	public-inbox-index stable

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.stable


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git