aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYunsheng Lin <linyunsheng@huawei.com>2018-08-14 12:13:16 -0400
committerDavid S. Miller <davem@davemloft.net>2018-08-14 12:54:23 -0400
commit128b900de7df567ca7ca063bf5da4ed0f357db8c (patch)
tree3babadfcdcf71e81abdaee52d9bbf6528ecdcbe1
parent60081dcc4fce385ade26d3145b2479789df0b7e5 (diff)
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: 09f2af6405b8 ("net: hns3: add support to modify tqps number") Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com> Signed-off-by: Peng Li <lipeng321@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index 2e9c8b9a75ce..8577dfc799ad 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -1267,35 +1267,37 @@ static int hclge_map_tqps_to_func(struct hclge_dev *hdev, u16 func_id,
1267 return ret; 1267 return ret;
1268} 1268}
1269 1269
1270static int hclge_assign_tqp(struct hclge_vport *vport, 1270static int hclge_assign_tqp(struct hclge_vport *vport)
1271 struct hnae3_queue **tqp, u16 num_tqps)
1272{ 1271{
1272 struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
1273 struct hclge_dev *hdev = vport->back; 1273 struct hclge_dev *hdev = vport->back;
1274 int i, alloced; 1274 int i, alloced;
1275 1275
1276 for (i = 0, alloced = 0; i < hdev->num_tqps && 1276 for (i = 0, alloced = 0; i < hdev->num_tqps &&
1277 alloced < num_tqps; i++) { 1277 alloced < kinfo->num_tqps; i++) {
1278 if (!hdev->htqp[i].alloced) { 1278 if (!hdev->htqp[i].alloced) {
1279 hdev->htqp[i].q.handle = &vport->nic; 1279 hdev->htqp[i].q.handle = &vport->nic;
1280 hdev->htqp[i].q.tqp_index = alloced; 1280 hdev->htqp[i].q.tqp_index = alloced;
1281 tqp[alloced] = &hdev->htqp[i].q; 1281 hdev->htqp[i].q.desc_num = kinfo->num_desc;
1282 kinfo->tqp[alloced] = &hdev->htqp[i].q;
1282 hdev->htqp[i].alloced = true; 1283 hdev->htqp[i].alloced = true;
1283 alloced++; 1284 alloced++;
1284 } 1285 }
1285 } 1286 }
1286 vport->alloc_tqps = num_tqps; 1287 vport->alloc_tqps = kinfo->num_tqps;
1287 1288
1288 return 0; 1289 return 0;
1289} 1290}
1290 1291
1291static int hclge_knic_setup(struct hclge_vport *vport, u16 num_tqps) 1292static int hclge_knic_setup(struct hclge_vport *vport,
1293 u16 num_tqps, u16 num_desc)
1292{ 1294{
1293 struct hnae3_handle *nic = &vport->nic; 1295 struct hnae3_handle *nic = &vport->nic;
1294 struct hnae3_knic_private_info *kinfo = &nic->kinfo; 1296 struct hnae3_knic_private_info *kinfo = &nic->kinfo;
1295 struct hclge_dev *hdev = vport->back; 1297 struct hclge_dev *hdev = vport->back;
1296 int i, ret; 1298 int i, ret;
1297 1299
1298 kinfo->num_desc = hdev->num_desc; 1300 kinfo->num_desc = num_desc;
1299 kinfo->rx_buf_len = hdev->rx_buf_len; 1301 kinfo->rx_buf_len = hdev->rx_buf_len;
1300 kinfo->num_tc = min_t(u16, num_tqps, hdev->tm_info.num_tc); 1302 kinfo->num_tc = min_t(u16, num_tqps, hdev->tm_info.num_tc);
1301 kinfo->rss_size 1303 kinfo->rss_size
@@ -1322,7 +1324,7 @@ static int hclge_knic_setup(struct hclge_vport *vport, u16 num_tqps)
1322 if (!kinfo->tqp) 1324 if (!kinfo->tqp)
1323 return -ENOMEM; 1325 return -ENOMEM;
1324 1326
1325 ret = hclge_assign_tqp(vport, kinfo->tqp, kinfo->num_tqps); 1327 ret = hclge_assign_tqp(vport);
1326 if (ret) 1328 if (ret)
1327 dev_err(&hdev->pdev->dev, "fail to assign TQPs %d.\n", ret); 1329 dev_err(&hdev->pdev->dev, "fail to assign TQPs %d.\n", ret);
1328 1330
@@ -1388,7 +1390,7 @@ static int hclge_vport_setup(struct hclge_vport *vport, u16 num_tqps)
1388 nic->numa_node_mask = hdev->numa_node_mask; 1390 nic->numa_node_mask = hdev->numa_node_mask;
1389 1391
1390 if (hdev->ae_dev->dev_type == HNAE3_DEV_KNIC) { 1392 if (hdev->ae_dev->dev_type == HNAE3_DEV_KNIC) {
1391 ret = hclge_knic_setup(vport, num_tqps); 1393 ret = hclge_knic_setup(vport, num_tqps, hdev->num_desc);
1392 if (ret) { 1394 if (ret) {
1393 dev_err(&hdev->pdev->dev, "knic setup failed %d\n", 1395 dev_err(&hdev->pdev->dev, "knic setup failed %d\n",
1394 ret); 1396 ret);
@@ -5936,7 +5938,7 @@ static int hclge_set_channels(struct hnae3_handle *handle, u32 new_tqps_num)
5936 /* Free old tqps, and reallocate with new tqp number when nic setup */ 5938 /* Free old tqps, and reallocate with new tqp number when nic setup */
5937 hclge_release_tqp(vport); 5939 hclge_release_tqp(vport);
5938 5940
5939 ret = hclge_knic_setup(vport, new_tqps_num); 5941 ret = hclge_knic_setup(vport, new_tqps_num, kinfo->num_desc);
5940 if (ret) { 5942 if (ret) {
5941 dev_err(&hdev->pdev->dev, "setup nic fail, ret =%d\n", ret); 5943 dev_err(&hdev->pdev->dev, "setup nic fail, ret =%d\n", ret);
5942 return ret; 5944 return ret;