| From 23628c38fab8c91219cc4fd8b668c5df00fccaeb Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 8 Mar 2024 14:59:21 -0700 |
| Subject: base/node / ACPI: Enumerate node access class for 'struct |
| access_coordinate' |
| |
| From: Dave Jiang <dave.jiang@intel.com> |
| |
| [ Upstream commit 11270e526276ffad4c4237acb393da82a3287487 ] |
| |
| Both generic node and HMAT handling code have been using magic numbers to |
| indicate access classes for 'struct access_coordinate'. Introduce enums to |
| enumerate the access0 and access1 classes shared by the two subsystems. |
| Update the function parameters and callers as appropriate to utilize the |
| new enum. |
| |
| Access0 is named to ACCESS_COORDINATE_LOCAL in order to indicate that the |
| access class is for 'struct access_coordinate' between a target node and |
| the nearest initiator node. |
| |
| Access1 is named to ACCESS_COORDINATE_CPU in order to indicate that the |
| access class is for 'struct access_coordinate' between a target node and |
| the nearest CPU node. |
| |
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: Rafael J. Wysocki <rafael@kernel.org> |
| Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Tested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Dave Jiang <dave.jiang@intel.com> |
| Link: https://lore.kernel.org/r/20240308220055.2172956-3-dave.jiang@intel.com |
| Signed-off-by: Dan Williams <dan.j.williams@intel.com> |
| Stable-dep-of: 214291cbaace ("acpi/hmat: Fix lockdep warning for hmem_register_resource()") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/acpi/numa/hmat.c | 26 ++++++++++++++------------ |
| drivers/base/node.c | 6 +++--- |
| include/linux/node.h | 18 +++++++++++++++--- |
| 3 files changed, 32 insertions(+), 18 deletions(-) |
| |
| diff --git a/drivers/acpi/numa/hmat.c b/drivers/acpi/numa/hmat.c |
| index 8a1802e078f3c..570be52c8d90a 100644 |
| --- a/drivers/acpi/numa/hmat.c |
| +++ b/drivers/acpi/numa/hmat.c |
| @@ -59,9 +59,7 @@ struct target_cache { |
| }; |
| |
| enum { |
| - NODE_ACCESS_CLASS_0 = 0, |
| - NODE_ACCESS_CLASS_1, |
| - NODE_ACCESS_CLASS_GENPORT_SINK, |
| + NODE_ACCESS_CLASS_GENPORT_SINK = ACCESS_COORDINATE_MAX, |
| NODE_ACCESS_CLASS_MAX, |
| }; |
| |
| @@ -333,11 +331,11 @@ static __init void hmat_update_target(unsigned int tgt_pxm, unsigned int init_px |
| |
| if (target && target->processor_pxm == init_pxm) { |
| hmat_update_target_access(target, type, value, |
| - NODE_ACCESS_CLASS_0); |
| + ACCESS_COORDINATE_LOCAL); |
| /* If the node has a CPU, update access 1 */ |
| if (node_state(pxm_to_node(init_pxm), N_CPU)) |
| hmat_update_target_access(target, type, value, |
| - NODE_ACCESS_CLASS_1); |
| + ACCESS_COORDINATE_CPU); |
| } |
| } |
| |
| @@ -668,7 +666,8 @@ static void hmat_update_target_attrs(struct memory_target *target, |
| */ |
| if (target->processor_pxm != PXM_INVAL) { |
| cpu_nid = pxm_to_node(target->processor_pxm); |
| - if (access == 0 || node_state(cpu_nid, N_CPU)) { |
| + if (access == ACCESS_COORDINATE_LOCAL || |
| + node_state(cpu_nid, N_CPU)) { |
| set_bit(target->processor_pxm, p_nodes); |
| return; |
| } |
| @@ -696,7 +695,8 @@ static void hmat_update_target_attrs(struct memory_target *target, |
| list_for_each_entry(initiator, &initiators, node) { |
| u32 value; |
| |
| - if (access == 1 && !initiator->has_cpu) { |
| + if (access == ACCESS_COORDINATE_CPU && |
| + !initiator->has_cpu) { |
| clear_bit(initiator->processor_pxm, p_nodes); |
| continue; |
| } |
| @@ -741,8 +741,10 @@ static void hmat_register_target_initiators(struct memory_target *target) |
| { |
| static DECLARE_BITMAP(p_nodes, MAX_NUMNODES); |
| |
| - __hmat_register_target_initiators(target, p_nodes, 0); |
| - __hmat_register_target_initiators(target, p_nodes, 1); |
| + __hmat_register_target_initiators(target, p_nodes, |
| + ACCESS_COORDINATE_LOCAL); |
| + __hmat_register_target_initiators(target, p_nodes, |
| + ACCESS_COORDINATE_CPU); |
| } |
| |
| static void hmat_register_target_cache(struct memory_target *target) |
| @@ -813,8 +815,8 @@ static void hmat_register_target(struct memory_target *target) |
| if (!target->registered) { |
| hmat_register_target_initiators(target); |
| hmat_register_target_cache(target); |
| - hmat_register_target_perf(target, NODE_ACCESS_CLASS_0); |
| - hmat_register_target_perf(target, NODE_ACCESS_CLASS_1); |
| + hmat_register_target_perf(target, ACCESS_COORDINATE_LOCAL); |
| + hmat_register_target_perf(target, ACCESS_COORDINATE_CPU); |
| target->registered = true; |
| } |
| mutex_unlock(&target_lock); |
| @@ -886,7 +888,7 @@ static int hmat_calculate_adistance(struct notifier_block *self, |
| return NOTIFY_OK; |
| |
| mutex_lock(&target_lock); |
| - hmat_update_target_attrs(target, p_nodes, 1); |
| + hmat_update_target_attrs(target, p_nodes, ACCESS_COORDINATE_CPU); |
| mutex_unlock(&target_lock); |
| |
| perf = &target->coord[1]; |
| diff --git a/drivers/base/node.c b/drivers/base/node.c |
| index 9a312650bd57e..2b398c8a0f06c 100644 |
| --- a/drivers/base/node.c |
| +++ b/drivers/base/node.c |
| @@ -126,7 +126,7 @@ static void node_access_release(struct device *dev) |
| } |
| |
| static struct node_access_nodes *node_init_node_access(struct node *node, |
| - unsigned int access) |
| + enum access_coordinate_class access) |
| { |
| struct node_access_nodes *access_node; |
| struct device *dev; |
| @@ -191,7 +191,7 @@ static struct attribute *access_attrs[] = { |
| * @access: The access class the for the given attributes |
| */ |
| void node_set_perf_attrs(unsigned int nid, struct access_coordinate *coord, |
| - unsigned int access) |
| + enum access_coordinate_class access) |
| { |
| struct node_access_nodes *c; |
| struct node *node; |
| @@ -689,7 +689,7 @@ int register_cpu_under_node(unsigned int cpu, unsigned int nid) |
| */ |
| int register_memory_node_under_compute_node(unsigned int mem_nid, |
| unsigned int cpu_nid, |
| - unsigned int access) |
| + enum access_coordinate_class access) |
| { |
| struct node *init_node, *targ_node; |
| struct node_access_nodes *initiator, *target; |
| diff --git a/include/linux/node.h b/include/linux/node.h |
| index 25b66d705ee2e..dfc004e4bee74 100644 |
| --- a/include/linux/node.h |
| +++ b/include/linux/node.h |
| @@ -34,6 +34,18 @@ struct access_coordinate { |
| unsigned int write_latency; |
| }; |
| |
| +/* |
| + * ACCESS_COORDINATE_LOCAL correlates to ACCESS CLASS 0 |
| + * - access_coordinate between target node and nearest initiator node |
| + * ACCESS_COORDINATE_CPU correlates to ACCESS CLASS 1 |
| + * - access_coordinate between target node and nearest CPU node |
| + */ |
| +enum access_coordinate_class { |
| + ACCESS_COORDINATE_LOCAL, |
| + ACCESS_COORDINATE_CPU, |
| + ACCESS_COORDINATE_MAX |
| +}; |
| + |
| enum cache_indexing { |
| NODE_CACHE_DIRECT_MAP, |
| NODE_CACHE_INDEXED, |
| @@ -66,7 +78,7 @@ struct node_cache_attrs { |
| #ifdef CONFIG_HMEM_REPORTING |
| void node_add_cache(unsigned int nid, struct node_cache_attrs *cache_attrs); |
| void node_set_perf_attrs(unsigned int nid, struct access_coordinate *coord, |
| - unsigned access); |
| + enum access_coordinate_class access); |
| #else |
| static inline void node_add_cache(unsigned int nid, |
| struct node_cache_attrs *cache_attrs) |
| @@ -75,7 +87,7 @@ static inline void node_add_cache(unsigned int nid, |
| |
| static inline void node_set_perf_attrs(unsigned int nid, |
| struct access_coordinate *coord, |
| - unsigned access) |
| + enum access_coordinate_class access) |
| { |
| } |
| #endif |
| @@ -137,7 +149,7 @@ extern void unregister_memory_block_under_nodes(struct memory_block *mem_blk); |
| |
| extern int register_memory_node_under_compute_node(unsigned int mem_nid, |
| unsigned int cpu_nid, |
| - unsigned access); |
| + enum access_coordinate_class access); |
| #else |
| static inline void node_dev_init(void) |
| { |
| -- |
| 2.51.0 |
| |