net/hns3: add restriction on setting VF MTU

When Rx of scattered packets is off, we have some possibility of using
vector Rx process function or simple Rx functions in hns3 PMD driver.
If the input MTU is increased and the maximum length of received packets
is greater than the length of a buffer for Rx packets, the hardware
network engine needs to use multiple BDs and buffers to store these
packets. This will cause problems when still using vector Rx process
function or simple Rx function to receiving packets. So, when Rx of
scattered packets is off and device is started, it is not permitted to
increase MTU so that the maximum length of Rx packets is greater than Rx
buffer length.

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
This commit is contained in:
Wei Hu (Xavier) 2020-09-09 17:23:38 +08:00 committed by Ferruh Yigit
parent a3d4f4d291
commit db433d5f75

View File

@ -871,6 +871,25 @@ hns3vf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
return -EIO;
}
/*
* when Rx of scattered packets is off, we have some possibility of
* using vector Rx process function or simple Rx functions in hns3 PMD
* driver. If the input MTU is increased and the maximum length of
* received packets is greater than the length of a buffer for Rx
* packet, the hardware network engine needs to use multiple BDs and
* buffers to store these packets. This will cause problems when still
* using vector Rx process function or simple Rx function to receiving
* packets. So, when Rx of scattered packets is off and device is
* started, it is not permitted to increase MTU so that the maximum
* length of Rx packets is greater than Rx buffer length.
*/
if (dev->data->dev_started && !dev->data->scattered_rx &&
frame_size > hw->rx_buf_len) {
hns3_err(hw, "failed to set mtu because current is "
"not scattered rx mode");
return -EOPNOTSUPP;
}
rte_spinlock_lock(&hw->lock);
ret = hns3vf_config_mtu(hw, mtu);
if (ret) {