From f9d8d98af1a8814377bcb9a587f61dee821683e1 Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Wed, 23 Jan 2019 12:40:39 +0900 Subject: [PATCH] sysfs: add missing symlinks for cpu/node Add the following patterns of symlinks: - /sys/bus/cpu/drivers/processor/cpu* - /sys/bus/node/devices/node* And slightly change how /sys/devices/system/cpu/cpu*/node* are created to avoid duplicate lookups Change-Id: Id94a4d157da06d75f6bd450d5bd9a9e7709a1414 --- executer/kernel/mcctrl/sysfs_files.c | 56 ++++++++++++---------------- kernel/ap.c | 6 +++ 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/executer/kernel/mcctrl/sysfs_files.c b/executer/kernel/mcctrl/sysfs_files.c index d7623247..c317e8b9 100644 --- a/executer/kernel/mcctrl/sysfs_files.c +++ b/executer/kernel/mcctrl/sysfs_files.c @@ -578,34 +578,6 @@ static void setup_cpu_sysfs_files(struct mcctrl_usrdata *udp, return; } /* setup_cpu_sysfs_files() */ -static void setup_cpus_sysfs_files_node_link(struct mcctrl_usrdata *udp) -{ - int error; - int cpu; - struct sysfs_handle handle; - - for (cpu = 0; cpu < udp->cpu_info->n_cpus; ++cpu) { - int node = linux_numa_2_mckernel_numa(udp, - cpu_to_node(mckernel_cpu_2_linux_cpu(udp, cpu))); - - error = sysfsm_lookupf(udp->os, &handle, - "/sys/devices/system/node/node%d", node); - if (error) { - panic("sysfsm_lookupf: node for CPU"); - } - - error = sysfsm_symlinkf(udp->os, handle, - "/sys/devices/system/cpu/cpu%d/node%d", - cpu, node); - if (error) { - panic("sysfsm_symlinkf(CPU in node)"); - } - } - - error = 0; - return; -} - static void setup_cpus_sysfs_files(struct mcctrl_usrdata *udp) { int error; @@ -731,7 +703,7 @@ static int setup_node_files(struct mcctrl_usrdata *udp) list_for_each_entry(p, &udp->node_topology_list, chain) { - struct sysfs_handle handle; + struct sysfs_handle node_handle, cpu_handle; int cpu; size_t offset = 0; param.nbits = nr_cpu_ids; @@ -762,6 +734,20 @@ static int setup_node_files(struct mcctrl_usrdata *udp) "/sys/devices/system/node/node%d/cpulist", p->mckernel_numa_id); + error = sysfsm_lookupf(udp->os, &node_handle, + "/sys/devices/system/node/node%d", + p->mckernel_numa_id); + if (error) { + panic("sysfsm_lookupf(node)"); + } + + error = sysfsm_symlinkf(udp->os, node_handle, + "/sys/bus/node/devices/node%d", + p->mckernel_numa_id); + if (error) { + panic("sysfsm_symlinkf(bus node)"); + } + /* Add CPU symlinks for this node */ for (cpu = 0; cpu < udp->cpu_info->n_cpus; ++cpu) { if (linux_numa_2_mckernel_numa(udp, @@ -770,13 +756,20 @@ static int setup_node_files(struct mcctrl_usrdata *udp) continue; } - error = sysfsm_lookupf(udp->os, &handle, + error = sysfsm_symlinkf(udp->os, node_handle, + "/sys/devices/system/cpu/cpu%d/node%d", + cpu, p->mckernel_numa_id); + if (error) { + panic("sysfsm_symlinkf(node in CPU)"); + } + + error = sysfsm_lookupf(udp->os, &cpu_handle, "/sys/devices/system/cpu/cpu%d", cpu); if (error) { panic("sysfsm_lookupf(CPU in node)"); } - error = sysfsm_symlinkf(udp->os, handle, + error = sysfsm_symlinkf(udp->os, cpu_handle, "/sys/devices/system/node/node%d/cpu%d", p->mckernel_numa_id, cpu); if (error) { @@ -1173,7 +1166,6 @@ void setup_sysfs_files(ihk_os_t os) setup_local_snooping_files(os); setup_cpus_sysfs_files(udp); setup_node_files(udp); - setup_cpus_sysfs_files_node_link(udp); #ifdef SETUP_PCI_FILES setup_pci_files(udp); #endif diff --git a/kernel/ap.c b/kernel/ap.c index 131efe4a..8609449b 100644 --- a/kernel/ap.c +++ b/kernel/ap.c @@ -258,6 +258,12 @@ cpu_sysfs_setup(void) if (error) { panic("cpu_sysfs_setup:sysfs_symlinkf failed\n"); } + + error = sysfs_symlinkf(targeth, "/sys/bus/cpu/drivers/processor/cpu%d", + cpu); + if (error) { + panic("cpu_sysfs_setup:sysfs_symlinkf failed\n"); + } } return;