Thomas Bogendoerfer 02f5c6
From: Yufeng Mo <moyufeng@huawei.com>
Thomas Bogendoerfer 02f5c6
Date: Mon, 13 Sep 2021 21:08:22 +0800
Thomas Bogendoerfer 02f5c6
Subject: net: hns3: change affinity_mask to numa node range
Thomas Bogendoerfer 02f5c6
Patch-mainline: v5.15-rc2
Thomas Bogendoerfer 02f5c6
Git-commit: 1dc839ec09d3ab2a4156dc98328b8bc3586f2b70
Thomas Bogendoerfer 02f5c6
References: bsc#1154353
Thomas Bogendoerfer 02f5c6
Thomas Bogendoerfer 02f5c6
Currently, affinity_mask is set to a single cpu. As a result,
Thomas Bogendoerfer 02f5c6
irqbalance becomes invalid in SUBSET or EXACT mode. To solve
Thomas Bogendoerfer 02f5c6
this problem, change affinity_mask to numa node range. In this
Thomas Bogendoerfer 02f5c6
way, irqbalance can be performed on the cpu of the numa node.
Thomas Bogendoerfer 02f5c6
Thomas Bogendoerfer 02f5c6
Fixes: 0812545487ec ("net: hns3: add interrupt affinity support for misc interrupt")
Thomas Bogendoerfer 02f5c6
Signed-off-by: Yufeng Mo <moyufeng@huawei.com>
Thomas Bogendoerfer 02f5c6
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
Thomas Bogendoerfer 02f5c6
Signed-off-by: David S. Miller <davem@davemloft.net>
Thomas Bogendoerfer 02f5c6
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Thomas Bogendoerfer 02f5c6
---
Thomas Bogendoerfer 02f5c6
 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c |   14 ++++++++------
Thomas Bogendoerfer 02f5c6
 1 file changed, 8 insertions(+), 6 deletions(-)
Thomas Bogendoerfer 02f5c6
Thomas Bogendoerfer 02f5c6
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
Thomas Bogendoerfer 02f5c6
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
Thomas Bogendoerfer 02f5c6
@@ -1359,9 +1359,10 @@ static void hclge_init_kdump_kernel_conf
Thomas Bogendoerfer 02f5c6
 
Thomas Bogendoerfer 02f5c6
 static int hclge_configure(struct hclge_dev *hdev)
Thomas Bogendoerfer 02f5c6
 {
Thomas Bogendoerfer 02f5c6
+	const struct cpumask *cpumask = cpu_online_mask;
Thomas Bogendoerfer 02f5c6
 	struct hclge_cfg cfg;
Thomas Bogendoerfer 02f5c6
 	unsigned int i;
Thomas Bogendoerfer 02f5c6
-	int ret;
Thomas Bogendoerfer 02f5c6
+	int node, ret;
Thomas Bogendoerfer 02f5c6
 
Thomas Bogendoerfer 02f5c6
 	ret = hclge_get_cfg(hdev, &cfg;;
Thomas Bogendoerfer 02f5c6
 	if (ret)
Thomas Bogendoerfer 02f5c6
@@ -1422,11 +1423,12 @@ static int hclge_configure(struct hclge_
Thomas Bogendoerfer 02f5c6
 
Thomas Bogendoerfer 02f5c6
 	hclge_init_kdump_kernel_config(hdev);
Thomas Bogendoerfer 02f5c6
 
Thomas Bogendoerfer 02f5c6
-	/* Set the init affinity based on pci func number */
Thomas Bogendoerfer 02f5c6
-	i = cpumask_weight(cpumask_of_node(dev_to_node(&hdev->pdev->dev)));
Thomas Bogendoerfer 02f5c6
-	i = i ? PCI_FUNC(hdev->pdev->devfn) % i : 0;
Thomas Bogendoerfer 02f5c6
-	cpumask_set_cpu(cpumask_local_spread(i, dev_to_node(&hdev->pdev->dev)),
Thomas Bogendoerfer 02f5c6
-			&hdev->affinity_mask);
Thomas Bogendoerfer 02f5c6
+	/* Set the affinity based on numa node */
Thomas Bogendoerfer 02f5c6
+	node = dev_to_node(&hdev->pdev->dev);
Thomas Bogendoerfer 02f5c6
+	if (node != NUMA_NO_NODE)
Thomas Bogendoerfer 02f5c6
+		cpumask = cpumask_of_node(node);
Thomas Bogendoerfer 02f5c6
+
Thomas Bogendoerfer 02f5c6
+	cpumask_copy(&hdev->affinity_mask, cpumask);
Thomas Bogendoerfer 02f5c6
 
Thomas Bogendoerfer 02f5c6
 	return ret;
Thomas Bogendoerfer 02f5c6
 }