[2/4] net/txgbe: fix VF MTU limit setting
Checks
Commit Message
Fix to set MTU bigger than mbuf size when device is stopped, scattered
rx may be enabled in next starting, exempt from setting in EAL parameters.
Fixes: a2beaa4a769e ("net/txgbe: support VF MTU update")
Cc: stable@dpdk.org
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_ethdev_vf.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
Comments
On 4/25/2021 9:03 AM, Jiawen Wu wrote:
> Fix to set MTU bigger than mbuf size when device is stopped, scattered
> rx may be enabled in next starting, exempt from setting in EAL parameters.
>
The main change is 'dev_started' check, right? Can you please reword above
paragraph to clarify it?
> Fixes: a2beaa4a769e ("net/txgbe: support VF MTU update")
> Cc: stable@dpdk.org
>
> Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
> ---
> drivers/net/txgbe/txgbe_ethdev_vf.c | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c b/drivers/net/txgbe/txgbe_ethdev_vf.c
> index 3a5123733e..5597968e18 100644
> --- a/drivers/net/txgbe/txgbe_ethdev_vf.c
> +++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
> @@ -1115,7 +1115,7 @@ txgbevf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
> {
> struct txgbe_hw *hw;
> uint32_t max_frame = mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
> - struct rte_eth_rxmode *rx_conf = &dev->data->dev_conf.rxmode;
> + struct rte_eth_dev_data *dev_data = dev->data;
>
> hw = TXGBE_DEV_HW(dev);
>
> @@ -1123,13 +1123,15 @@ txgbevf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
> max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
> return -EINVAL;
>
> - /* refuse mtu that requires the support of scattered packets when this
> - * feature has not been enabled before.
> + /* If device is started, refuse mtu that requires the support of
> + * scattered packets when this feature has not been enabled before.
> */
> - if (!(rx_conf->offloads & DEV_RX_OFFLOAD_SCATTER) &&
> + if (dev_data->dev_started && !dev_data->scattered_rx &&
> (max_frame + 2 * TXGBE_VLAN_TAG_SIZE >
> - dev->data->min_rx_buf_size - RTE_PKTMBUF_HEADROOM))
> + dev->data->min_rx_buf_size - RTE_PKTMBUF_HEADROOM)) {
> + PMD_INIT_LOG(ERR, "Stop port first.");
> return -EINVAL;
> + }
>
> /*
> * When supported by the underlying PF driver, use the TXGBE_VF_SET_MTU
>
@@ -1115,7 +1115,7 @@ txgbevf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
{
struct txgbe_hw *hw;
uint32_t max_frame = mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
- struct rte_eth_rxmode *rx_conf = &dev->data->dev_conf.rxmode;
+ struct rte_eth_dev_data *dev_data = dev->data;
hw = TXGBE_DEV_HW(dev);
@@ -1123,13 +1123,15 @@ txgbevf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN)
return -EINVAL;
- /* refuse mtu that requires the support of scattered packets when this
- * feature has not been enabled before.
+ /* If device is started, refuse mtu that requires the support of
+ * scattered packets when this feature has not been enabled before.
*/
- if (!(rx_conf->offloads & DEV_RX_OFFLOAD_SCATTER) &&
+ if (dev_data->dev_started && !dev_data->scattered_rx &&
(max_frame + 2 * TXGBE_VLAN_TAG_SIZE >
- dev->data->min_rx_buf_size - RTE_PKTMBUF_HEADROOM))
+ dev->data->min_rx_buf_size - RTE_PKTMBUF_HEADROOM)) {
+ PMD_INIT_LOG(ERR, "Stop port first.");
return -EINVAL;
+ }
/*
* When supported by the underlying PF driver, use the TXGBE_VF_SET_MTU