|
@@ -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,
|
|
|
|
|
- struct hnae3_queue **tqp, u16 num_tqps)
|
|
|
|
|
|
|
+static int hclge_assign_tqp(struct hclge_vport *vport)
|
|
|
{
|
|
{
|
|
|
|
|
+ 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)
|
|
|
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)
|
|
|
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)
|
|
|
/* 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;
|