According to Section 6.2.14 from ACPI spec 6.3 [1], the setting
of proximity domain is optional, as below:

This optional object is used to describe proximity domain
associations within a machine. _PXM evaluates to an integer
that identifies a device as belonging to a Proximity Domain
defined in the System Resource Affinity Table (SRAT).

It seems sh does not have real numa support or uncompleted
numa support, this patch still checks node id with the below
case to ensure future support is consistent:
1. if node_id >= nr_node_ids, return cpu_none_mask
2. if node_id < 0, return cpu_online_mask
3. if node_to_cpumask_map[node_id] is NULL, return cpu_online_mask

[1] https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf

Signed-off-by: Yunsheng Lin <linyunsh...@huawei.com>
---
 arch/sh/include/asm/topology.h | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/arch/sh/include/asm/topology.h b/arch/sh/include/asm/topology.h
index 1db470e..e71e0a0 100644
--- a/arch/sh/include/asm/topology.h
+++ b/arch/sh/include/asm/topology.h
@@ -6,7 +6,19 @@
 
 #define cpu_to_node(cpu)       ((void)(cpu),0)
 
-#define cpumask_of_node(node)  ((void)node, cpu_online_mask)
+static inline const struct cpumask *cpumask_of_node(int node)
+{
+       if (node >= nr_node_ids)
+               return cpu_none_mask;
+
+       if (node < 0 || !node_to_cpumask_map[node])
+               return cpu_online_mask;
+
+       /* Should return actual mask based on node_to_cpumask_map
+        * if sh arch supports real numa node.
+        */
+       return cpu_online_mask;
+}
 
 #define pcibus_to_node(bus)    ((void)(bus), -1)
 #define cpumask_of_pcibus(bus) (pcibus_to_node(bus) == -1 ? \
-- 
2.8.1

Reply via email to