mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
base/node / ACPI: Enumerate node access class for 'struct access_coordinate'
[ Upstream commit11270e5262
] 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:592780b839
("cxl: Fix retrieving of access_coordinates in PCIe path") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
022b7d5cae
commit
13c92c2e9e
@ -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,
|
||||
};
|
||||
|
||||
@ -374,11 +372,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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -709,7 +707,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;
|
||||
}
|
||||
@ -737,7 +736,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;
|
||||
}
|
||||
@ -782,8 +782,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)
|
||||
@ -854,8 +856,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);
|
||||
@ -927,7 +929,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];
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user