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;
        int i, alloced;
 
        for (i = 0, alloced = 0; i < hdev->num_tqps &&
-            alloced < num_tqps; i++) {
+            alloced < kinfo->num_tqps; i++) {
                if (!hdev->htqp[i].alloced) {
                        hdev->htqp[i].q.handle = &vport->nic;
                        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;
                        alloced++;
                }
        }
-       vport->alloc_tqps = num_tqps;
+       vport->alloc_tqps = kinfo->num_tqps;
 
        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_knic_private_info *kinfo = &nic->kinfo;
        struct hclge_dev *hdev = vport->back;
        int i, ret;
 
-       kinfo->num_desc = hdev->num_desc;
+       kinfo->num_desc = num_desc;
        kinfo->rx_buf_len = hdev->rx_buf_len;
        kinfo->num_tc = min_t(u16, num_tqps, hdev->tm_info.num_tc);
        kinfo->rss_size
        if (!kinfo->tqp)
                return -ENOMEM;
 
-       ret = hclge_assign_tqp(vport, kinfo->tqp, kinfo->num_tqps);
+       ret = hclge_assign_tqp(vport);
        if (ret)
                dev_err(&hdev->pdev->dev, "fail to assign TQPs %d.\n", ret);
 
        nic->numa_node_mask = hdev->numa_node_mask;
 
        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) {
                        dev_err(&hdev->pdev->dev, "knic setup failed %d\n",
                                ret);
        /* Free old tqps, and reallocate with new tqp number when nic setup */
        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) {
                dev_err(&hdev->pdev->dev, "setup nic fail, ret =%d\n", ret);
                return ret;