diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index 7326dbca28cf280bf305a7a46cbbb561b6d2601a..f61ef8ae8817172a79e08e56f2ba0921a38d3a3a 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -1564,7 +1564,7 @@ static int hclge_vport_setup(struct hclge_vport *vport, u16 num_tqps)
 	 * to make sure one irq just bind to one tqp, this can improve
 	 * the performance
 	 */
-	alloc_tqps = min(hdev->num_msi_left, num_tqps);
+	alloc_tqps = min_t(u16, hdev->roce_base_msix_offset - 1, num_tqps);
 
 	ret = hclge_knic_setup(vport, alloc_tqps,
 			       hdev->num_tx_desc, hdev->num_rx_desc);
@@ -2276,17 +2276,7 @@ static int hclge_init_msi(struct hclge_dev *hdev)
 			 hdev->num_msi, vectors);
 
 	hdev->num_msi = vectors;
-
-	/* num_msi_left means the vector number of nic.
-	 * 1. if not support RoCE, roce_base_msix_offset is 0, the num_msi_left
-	 * equals to vectors.
-	 * 2. if support RoCE, roce_base_msix_offset means the vector number of
-	 * nic, so num_msi_left equals to roce_base_msix_offset.
-	 */
 	hdev->num_msi_left = vectors;
-	if (hnae3_dev_roce_supported(hdev))
-		hdev->num_msi_left = min(hdev->num_msi_left,
-					 hdev->roce_base_msix_offset);
 
 	hdev->base_msi_vector = pdev->irq;
 	hdev->roce_base_vector = hdev->base_msi_vector +
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
index cedfc51a620e06135e5d921c1f73c0170fd0b506..cf978a16fd3d4dea649317d95d8ed91fa4e4f4a0 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
@@ -253,7 +253,9 @@ static int hclgevf_get_queue_info(struct hclgevf_dev *hdev)
 	 * to make sure one irq just bind to one tqp, this can improve
 	 * the performance
 	 */
-	hdev->num_tqps = min(hdev->num_msi_left, hdev->num_tqps);
+	hdev->num_tqps = min_t(u16, hdev->roce_base_msix_offset - 1,
+			       hdev->num_tqps);
+	hdev->rss_size_max = min_t(u16, hdev->num_tqps, hdev->rss_size_max);
 
 	return 0;
 }
@@ -2220,17 +2222,7 @@ static int hclgevf_init_msi(struct hclgevf_dev *hdev)
 			 hdev->num_msi, vectors);
 
 	hdev->num_msi = vectors;
-
-	/* num_msi_left means the vector number of nic.
-	 * 1. if not support RoCE, roce_base_msix_offset is 0, the num_msi_left
-	 * equals to vectors.
-	 * 2. if support RoCE, roce_base_msix_offset means the vector number of
-	 * nic, so num_msi_left equals to roce_base_msix_offset.
-	 */
 	hdev->num_msi_left = vectors;
-	if (hnae3_dev_roce_supported(hdev))
-		hdev->num_msi_left = min(hdev->num_msi_left,
-					 hdev->roce_base_msix_offset);
 
 	hdev->base_msi_vector = pdev->irq;
 	hdev->roce_base_vector = pdev->irq + hdev->roce_base_msix_offset;