Commit 128b900d authored by Yunsheng Lin's avatar Yunsheng Lin Committed by David S. Miller

net: hns3: Fix desc num set to default when setting channel

When user set the channel num using "ethtool -L ethX", the desc num
of BD will set to default value, which will cause desc num set by
user lost problem.

This patch fixes it by restoring the desc num set by user when setting
channel num.

Fixes: 09f2af64 ("net: hns3: add support to modify tqps number")
Signed-off-by: default avatarYunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: default avatarPeng Li <lipeng321@huawei.com>
Signed-off-by: default avatarSalil Mehta <salil.mehta@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 60081dcc
...@@ -1267,35 +1267,37 @@ static int hclge_map_tqps_to_func(struct hclge_dev *hdev, u16 func_id, ...@@ -1267,35 +1267,37 @@ static int hclge_map_tqps_to_func(struct hclge_dev *hdev, u16 func_id,
return ret; return ret;
} }
static int hclge_assign_tqp(struct hclge_vport *vport, static int hclge_assign_tqp(struct hclge_vport *vport)
struct hnae3_queue **tqp, u16 num_tqps)
{ {
struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
struct hclge_dev *hdev = vport->back; struct hclge_dev *hdev = vport->back;
int i, alloced; int i, alloced;
for (i = 0, alloced = 0; i < hdev->num_tqps && for (i = 0, alloced = 0; i < hdev->num_tqps &&
alloced < num_tqps; i++) { alloced < kinfo->num_tqps; i++) {
if (!hdev->htqp[i].alloced) { if (!hdev->htqp[i].alloced) {
hdev->htqp[i].q.handle = &vport->nic; hdev->htqp[i].q.handle = &vport->nic;
hdev->htqp[i].q.tqp_index = alloced; hdev->htqp[i].q.tqp_index = alloced;
tqp[alloced] = &hdev->htqp[i].q; hdev->htqp[i].q.desc_num = kinfo->num_desc;
kinfo->tqp[alloced] = &hdev->htqp[i].q;
hdev->htqp[i].alloced = true; hdev->htqp[i].alloced = true;
alloced++; alloced++;
} }
} }
vport->alloc_tqps = num_tqps; vport->alloc_tqps = kinfo->num_tqps;
return 0; return 0;
} }
static int hclge_knic_setup(struct hclge_vport *vport, u16 num_tqps) static int hclge_knic_setup(struct hclge_vport *vport,
u16 num_tqps, u16 num_desc)
{ {
struct hnae3_handle *nic = &vport->nic; struct hnae3_handle *nic = &vport->nic;
struct hnae3_knic_private_info *kinfo = &nic->kinfo; struct hnae3_knic_private_info *kinfo = &nic->kinfo;
struct hclge_dev *hdev = vport->back; struct hclge_dev *hdev = vport->back;
int i, ret; int i, ret;
kinfo->num_desc = hdev->num_desc; kinfo->num_desc = num_desc;
kinfo->rx_buf_len = hdev->rx_buf_len; kinfo->rx_buf_len = hdev->rx_buf_len;
kinfo->num_tc = min_t(u16, num_tqps, hdev->tm_info.num_tc); kinfo->num_tc = min_t(u16, num_tqps, hdev->tm_info.num_tc);
kinfo->rss_size kinfo->rss_size
...@@ -1322,7 +1324,7 @@ static int hclge_knic_setup(struct hclge_vport *vport, u16 num_tqps) ...@@ -1322,7 +1324,7 @@ static int hclge_knic_setup(struct hclge_vport *vport, u16 num_tqps)
if (!kinfo->tqp) if (!kinfo->tqp)
return -ENOMEM; return -ENOMEM;
ret = hclge_assign_tqp(vport, kinfo->tqp, kinfo->num_tqps); ret = hclge_assign_tqp(vport);
if (ret) if (ret)
dev_err(&hdev->pdev->dev, "fail to assign TQPs %d.\n", ret); dev_err(&hdev->pdev->dev, "fail to assign TQPs %d.\n", ret);
...@@ -1388,7 +1390,7 @@ static int hclge_vport_setup(struct hclge_vport *vport, u16 num_tqps) ...@@ -1388,7 +1390,7 @@ static int hclge_vport_setup(struct hclge_vport *vport, u16 num_tqps)
nic->numa_node_mask = hdev->numa_node_mask; nic->numa_node_mask = hdev->numa_node_mask;
if (hdev->ae_dev->dev_type == HNAE3_DEV_KNIC) { if (hdev->ae_dev->dev_type == HNAE3_DEV_KNIC) {
ret = hclge_knic_setup(vport, num_tqps); ret = hclge_knic_setup(vport, num_tqps, hdev->num_desc);
if (ret) { if (ret) {
dev_err(&hdev->pdev->dev, "knic setup failed %d\n", dev_err(&hdev->pdev->dev, "knic setup failed %d\n",
ret); ret);
...@@ -5936,7 +5938,7 @@ static int hclge_set_channels(struct hnae3_handle *handle, u32 new_tqps_num) ...@@ -5936,7 +5938,7 @@ static int hclge_set_channels(struct hnae3_handle *handle, u32 new_tqps_num)
/* Free old tqps, and reallocate with new tqp number when nic setup */ /* Free old tqps, and reallocate with new tqp number when nic setup */
hclge_release_tqp(vport); hclge_release_tqp(vport);
ret = hclge_knic_setup(vport, new_tqps_num); ret = hclge_knic_setup(vport, new_tqps_num, kinfo->num_desc);
if (ret) { if (ret) {
dev_err(&hdev->pdev->dev, "setup nic fail, ret =%d\n", ret); dev_err(&hdev->pdev->dev, "setup nic fail, ret =%d\n", ret);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment