mirror of
https://github.com/torvalds/linux.git
synced 2026-03-14 02:06:15 +01:00
drivers/base/node: Add a helper function node_update_perf_attrs()
Add helper function node_update_perf_attrs() to allow update of node access coordinates computed by an external agent such as CXL. The helper allows updating of coordinates after the attribute being created by HMAT. Acked-by: David Hildenbrand <david@redhat.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Link: https://patch.msgid.link/20250829222907.1290912-3-dave.jiang@intel.com Signed-off-by: Dave Jiang <dave.jiang@intel.com>
This commit is contained in:
parent
65128868bb
commit
b57fc652ca
2 changed files with 46 additions and 0 deletions
|
|
@ -248,6 +248,44 @@ void node_set_perf_attrs(unsigned int nid, struct access_coordinate *coord,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(node_set_perf_attrs);
|
||||
|
||||
/**
|
||||
* node_update_perf_attrs - Update the performance values for given access class
|
||||
* @nid: Node identifier to be updated
|
||||
* @coord: Heterogeneous memory performance coordinates
|
||||
* @access: The access class for the given attributes
|
||||
*/
|
||||
void node_update_perf_attrs(unsigned int nid, struct access_coordinate *coord,
|
||||
enum access_coordinate_class access)
|
||||
{
|
||||
struct node_access_nodes *access_node;
|
||||
struct node *node;
|
||||
int i;
|
||||
|
||||
if (WARN_ON_ONCE(!node_online(nid)))
|
||||
return;
|
||||
|
||||
node = node_devices[nid];
|
||||
list_for_each_entry(access_node, &node->access_list, list_node) {
|
||||
if (access_node->access != access)
|
||||
continue;
|
||||
|
||||
access_node->coord = *coord;
|
||||
for (i = 0; access_attrs[i]; i++) {
|
||||
sysfs_notify(&access_node->dev.kobj,
|
||||
NULL, access_attrs[i]->name);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* When setting CPU access coordinates, update mempolicy */
|
||||
if (access != ACCESS_COORDINATE_CPU)
|
||||
return;
|
||||
|
||||
if (mempolicy_set_node_perf(nid, coord))
|
||||
pr_info("failed to set mempolicy attrs for node %d\n", nid);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(node_update_perf_attrs);
|
||||
|
||||
/**
|
||||
* struct node_cache_info - Internal tracking for memory node caches
|
||||
* @dev: Device represeting the cache level
|
||||
|
|
|
|||
|
|
@ -85,6 +85,8 @@ struct node_cache_attrs {
|
|||
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,
|
||||
enum access_coordinate_class access);
|
||||
void node_update_perf_attrs(unsigned int nid, struct access_coordinate *coord,
|
||||
enum access_coordinate_class access);
|
||||
#else
|
||||
static inline void node_add_cache(unsigned int nid,
|
||||
struct node_cache_attrs *cache_attrs)
|
||||
|
|
@ -96,6 +98,12 @@ static inline void node_set_perf_attrs(unsigned int nid,
|
|||
enum access_coordinate_class access)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void node_update_perf_attrs(unsigned int nid,
|
||||
struct access_coordinate *coord,
|
||||
enum access_coordinate_class access)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
struct node {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue