NUMA: fill in /sys/devices/system/cpu/nodeX properly and sync with boot script
This commit is contained in:
@ -205,7 +205,7 @@ if [ "$enable_mcoverlay" == "yes" ]; then
|
|||||||
if ! mount -t mcoverlay mcoverlay -o lowerdir=/proc/mcos0:/proc,upperdir=/tmp/mcos/mcos0_proc_upper,workdir=/tmp/mcos/mcos0_proc_work,nocopyupw,nofscheck /tmp/mcos/mcos0_proc; then echo "error: mount /tmp/mcos/mcos0_proc" >&2; exit 1; fi
|
if ! mount -t mcoverlay mcoverlay -o lowerdir=/proc/mcos0:/proc,upperdir=/tmp/mcos/mcos0_proc_upper,workdir=/tmp/mcos/mcos0_proc_work,nocopyupw,nofscheck /tmp/mcos/mcos0_proc; then echo "error: mount /tmp/mcos/mcos0_proc" >&2; exit 1; fi
|
||||||
mount --make-rprivate /proc
|
mount --make-rprivate /proc
|
||||||
|
|
||||||
while [ ! -e /sys/devices/virtual/mcos/mcos0/sys/devices/system/node ]
|
while [ ! -e /sys/devices/virtual/mcos/mcos0/sys/setup_complete ]
|
||||||
do
|
do
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
@ -214,9 +214,16 @@ if [ "$enable_mcoverlay" == "yes" ]; then
|
|||||||
if [ ! -e /tmp/mcos/mcos0_sys_work ]; then mkdir -p /tmp/mcos/mcos0_sys_work; fi
|
if [ ! -e /tmp/mcos/mcos0_sys_work ]; then mkdir -p /tmp/mcos/mcos0_sys_work; fi
|
||||||
if ! mount -t mcoverlay mcoverlay -o lowerdir=/sys/devices/virtual/mcos/mcos0/sys:/sys,upperdir=/tmp/mcos/mcos0_sys_upper,workdir=/tmp/mcos/mcos0_sys_work,nocopyupw,nofscheck /tmp/mcos/mcos0_sys; then echo "error: mount /tmp/mcos/mcos0_sys" >&2; exit 1; fi
|
if ! mount -t mcoverlay mcoverlay -o lowerdir=/sys/devices/virtual/mcos/mcos0/sys:/sys,upperdir=/tmp/mcos/mcos0_sys_upper,workdir=/tmp/mcos/mcos0_sys_work,nocopyupw,nofscheck /tmp/mcos/mcos0_sys; then echo "error: mount /tmp/mcos/mcos0_sys" >&2; exit 1; fi
|
||||||
mount --make-rprivate /sys
|
mount --make-rprivate /sys
|
||||||
|
rm -rf /tmp/mcos/mcos0_sys/setup_complete
|
||||||
for cpuid in `find /sys/devices/system/cpu/* -maxdepth 0 -name "cpu[0123456789]*" -printf "%f "`; do
|
for cpuid in `find /sys/devices/system/cpu/* -maxdepth 0 -name "cpu[0123456789]*" -printf "%f "`; do
|
||||||
if [ ! -e "/sys/devices/virtual/mcos/mcos0/sys/devices/system/cpu/$cpuid" ]; then
|
if [ ! -e "/sys/devices/virtual/mcos/mcos0/sys/devices/system/cpu/$cpuid" ]; then
|
||||||
rm -rf /tmp/mcos/mcos0_sys/devices/system/cpu/$cpuid
|
rm -rf /tmp/mcos/mcos0_sys/devices/system/cpu/$cpuid
|
||||||
|
else
|
||||||
|
for nodeid in `find /sys/devices/system/cpu/$cpuid/* -maxdepth 0 -name "node[0123456789]*" -printf "%f "`; do
|
||||||
|
if [ ! -e "/sys/devices/virtual/mcos/mcos0/sys/devices/system/cpu/$cpuid/$nodeid" ]; then
|
||||||
|
rm -f /tmp/mcos/mcos0_sys/devices/system/cpu/$cpuid/$nodeid
|
||||||
|
fi
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
for nodeid in `find /sys/devices/system/node/* -maxdepth 0 -name "node[0123456789]*" -printf "%f "`; do
|
for nodeid in `find /sys/devices/system/node/* -maxdepth 0 -name "node[0123456789]*" -printf "%f "`; do
|
||||||
|
|||||||
@ -538,6 +538,34 @@ static void setup_cpu_sysfs_files(struct mcctrl_usrdata *udp,
|
|||||||
return;
|
return;
|
||||||
} /* setup_cpu_sysfs_files() */
|
} /* 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)
|
static void setup_cpus_sysfs_files(struct mcctrl_usrdata *udp)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
@ -1028,8 +1056,15 @@ void setup_sysfs_files(ihk_os_t os)
|
|||||||
setup_local_snooping_files(os);
|
setup_local_snooping_files(os);
|
||||||
setup_cpus_sysfs_files(udp);
|
setup_cpus_sysfs_files(udp);
|
||||||
setup_node_files(udp);
|
setup_node_files(udp);
|
||||||
|
setup_cpus_sysfs_files_node_link(udp);
|
||||||
setup_pci_files(udp);
|
setup_pci_files(udp);
|
||||||
|
|
||||||
|
/* Indicate sysfs files setup completion for boot script */
|
||||||
|
error = sysfsm_mkdirf(os, NULL, "/sys/setup_complete");
|
||||||
|
if (error) {
|
||||||
|
panic("sysfsm_mkdir(complete)");
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} /* setup_files() */
|
} /* setup_files() */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user