[PATCH 7/7] drm/amdgpu: Add numa_node in cpu/gpu topology device sysfs entry
Donet Tom <[email protected]> Tue, 4 Aug 2026 15:22:36 +0530
| Newsgroups | org.freedesktop.lists.amd-gfx |
|---|---|
| Message-ID | <ae22ce48e0067ce29b7b3ffa49b91c9b68cd759f.1785833981.git.donettom@linux.ibm.com> |
Added a numa_node sysfs attribute for CPU and GPU topology devices. This attribute exposed the NUMA node associated with the corresponding topology device through the topology sysfs interface. Signed-off-by: Donet Tom <[email protected]> --- drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 15 +++++++++++++++ drivers/gpu/drm/amd/amdkfd/kfd_topology.h | 1 + 2 files changed, 16 insertions(+) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c index d3269f0ffec3..51780bc8aabc 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c @@ -418,6 +418,14 @@ static ssize_t node_show(struct kobject *kobj, struct attribute *attr, return sysfs_show_32bit_val(buffer, offs, dev->gpu_id); } + if (strcmp(attr->name, "numa_node") == 0) { + dev = container_of(attr, struct kfd_topology_device, + attr_numa_node); + if (dev->gpu && kfd_devcgroup_check_permission(dev->gpu)) + return -EPERM; + return sysfs_show_32bit_val(buffer, offs, dev->numa_node); + } + if (strcmp(attr->name, "name") == 0) { dev = container_of(attr, struct kfd_topology_device, attr_name); @@ -630,6 +638,7 @@ static void kfd_remove_sysfs_node_entry(struct kfd_topology_device *dev) if (dev->kobj_node) { sysfs_remove_file(dev->kobj_node, &dev->attr_gpuid); + sysfs_remove_file(dev->kobj_node, &dev->attr_numa_node); sysfs_remove_file(dev->kobj_node, &dev->attr_name); sysfs_remove_file(dev->kobj_node, &dev->attr_props); kobject_del(dev->kobj_node); @@ -693,6 +702,9 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev, dev->attr_gpuid.name = "gpu_id"; dev->attr_gpuid.mode = KFD_SYSFS_FILE_MODE; sysfs_attr_init(&dev->attr_gpuid); + dev->attr_numa_node.name = "numa_node"; + dev->attr_numa_node.mode = KFD_SYSFS_FILE_MODE; + sysfs_attr_init(&dev->attr_numa_node); dev->attr_name.name = "name"; dev->attr_name.mode = KFD_SYSFS_FILE_MODE; sysfs_attr_init(&dev->attr_name); @@ -700,6 +712,9 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev, dev->attr_props.mode = KFD_SYSFS_FILE_MODE; sysfs_attr_init(&dev->attr_props); ret = sysfs_create_file(dev->kobj_node, &dev->attr_gpuid); + if (ret < 0) + return ret; + ret = sysfs_create_file(dev->kobj_node, &dev->attr_numa_node); if (ret < 0) return ret; ret = sysfs_create_file(dev->kobj_node, &dev->attr_name); diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.h b/drivers/gpu/drm/amd/amdkfd/kfd_topology.h index 312802754096..90777af8e665 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.h +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.h @@ -160,6 +160,7 @@ struct kfd_topology_device { struct kobject *kobj_p2plink; struct kobject *kobj_perf; struct attribute attr_gpuid; + struct attribute attr_numa_node; struct attribute attr_name; struct attribute attr_props; union { -- 2.54.0