Update DPDK version from 19.11 to 20.11 and also support hns3 PMD for Kunpeng 920 and Kunpeng 930. Signed-off-by: speech_white <humin29@huawei.com>
79 lines
2.3 KiB
Diff
79 lines
2.3 KiB
Diff
From 7e76a11ae316966bb1094e3797a7f7c8fe4e3213 Mon Sep 17 00:00:00 2001
|
|
From: Chengchang Tang <tangchengchang@huawei.com>
|
|
Date: Thu, 4 Mar 2021 15:44:50 +0800
|
|
Subject: [PATCH 054/189] net/hns3: fix HW buffer size on MTU update
|
|
|
|
After MTU changed, the buffer used to store packets in HW should be
|
|
reallocated. And buffer size is allocated based on the maximum frame
|
|
size in the PF struct. However, the value of maximum frame size is
|
|
not updated in time when MTU is changed. This would lead to a packet
|
|
loss for not enough buffer.
|
|
|
|
This patch update the maximum frame size before reallocating the HW
|
|
buffer. And a rollback operation is added to avoid the side effects
|
|
of buffer reallocation failures.
|
|
|
|
Fixes: 1f5ca0b460cd ("net/hns3: support some device operations")
|
|
Fixes: d51867db65c1 ("net/hns3: add initialization")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
|
|
Signed-off-by: Lijun Ou <oulijun@huawei.com>
|
|
---
|
|
drivers/net/hns3/hns3_ethdev.c | 24 ++++++++++++++++++++----
|
|
1 file changed, 20 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
|
index 7993d2d..6a56a05 100644
|
|
--- a/drivers/net/hns3/hns3_ethdev.c
|
|
+++ b/drivers/net/hns3/hns3_ethdev.c
|
|
@@ -2460,17 +2460,33 @@ hns3_set_mac_mtu(struct hns3_hw *hw, uint16_t new_mps)
|
|
static int
|
|
hns3_config_mtu(struct hns3_hw *hw, uint16_t mps)
|
|
{
|
|
+ struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
|
|
+ uint16_t original_mps = hns->pf.mps;
|
|
+ int err;
|
|
int ret;
|
|
|
|
ret = hns3_set_mac_mtu(hw, mps);
|
|
if (ret) {
|
|
- hns3_err(hw, "Failed to set mtu, ret = %d", ret);
|
|
+ hns3_err(hw, "failed to set mtu, ret = %d", ret);
|
|
return ret;
|
|
}
|
|
|
|
+ hns->pf.mps = mps;
|
|
ret = hns3_buffer_alloc(hw);
|
|
- if (ret)
|
|
- hns3_err(hw, "Failed to allocate buffer, ret = %d", ret);
|
|
+ if (ret) {
|
|
+ hns3_err(hw, "failed to allocate buffer, ret = %d", ret);
|
|
+ goto rollback;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+
|
|
+rollback:
|
|
+ err = hns3_set_mac_mtu(hw, original_mps);
|
|
+ if (err) {
|
|
+ hns3_err(hw, "fail to rollback MTU, err = %d", err);
|
|
+ return ret;
|
|
+ }
|
|
+ hns->pf.mps = original_mps;
|
|
|
|
return ret;
|
|
}
|
|
@@ -2505,7 +2521,7 @@ hns3_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
|
dev->data->port_id, mtu, ret);
|
|
return ret;
|
|
}
|
|
- hns->pf.mps = (uint16_t)frame_size;
|
|
+
|
|
if (is_jumbo_frame)
|
|
dev->data->dev_conf.rxmode.offloads |=
|
|
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
|
--
|
|
2.7.4
|
|
|