[dpdk-dev,v3] net/ixgbe: remove MTU setting limitation when port's stopped
Checks
Commit Message
Currently, setting MTU will fail if MTU requires the support
of scattered packets before scattered_rx is enabled.
This patch allows setting this special MTU when device is
stopped, cause scattered_rx will be re-configured during
starting port.
Signed-off-by: Beilei Xing <beilei.xing@intel.com>
---
v3 changes:
-Check dev_data->scattered_rx instead of rx_conf->enable_scatter
v2 changes:
-Change commit log
drivers/net/ixgbe/ixgbe_ethdev.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
Comments
On 7/6/2017 4:36 AM, Beilei Xing wrote:
> Currently, setting MTU will fail if MTU requires the support
> of scattered packets before scattered_rx is enabled.
> This patch allows setting this special MTU when device is
> stopped, cause scattered_rx will be re-configured during
> starting port.
>
> Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
Applied to dpdk-next-net/master, thanks.
(Kept Wenzhuo's ACK from previous version)
@@ -4811,7 +4811,7 @@ ixgbe_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
struct ixgbe_hw *hw;
struct rte_eth_dev_info dev_info;
uint32_t frame_size = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
- struct rte_eth_rxmode *rx_conf = &dev->data->dev_conf.rxmode;
+ struct rte_eth_dev_data *dev_data = dev->data;
ixgbe_dev_info_get(dev, &dev_info);
@@ -4819,13 +4819,15 @@ ixgbe_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
if ((mtu < ETHER_MIN_MTU) || (frame_size > dev_info.max_rx_pktlen))
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->enable_scatter &&
+ if (dev_data->dev_started && !dev_data->scattered_rx &&
(frame_size + 2 * IXGBE_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;
+ }
hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);