From: Jason Lowe-Power Date: Tue, 25 Jul 2017 18:12:27 +0000 (-0500) Subject: sim-se: Add /sys/devices/system/cpu/online file X-Git-Tag: v19.0.0.0~2228 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1723e8ecc28ee8b55c9b8008456726f60ea8fcc2;p=gem5.git sim-se: Add /sys/devices/system/cpu/online file Add the special file /sys/devices/system/cpu/online to the files that gem5 knows how to handle in SE mode. This file lists the CPUs that are active. For instance, in an 8 CPU system it is the following: 0-7 This implementation simply returns a file that is 0-%d where %d is the current number of thread contexts. This file is required for C++11 threads with gcc 4.8 and above. Change-Id: I0b566f77e75e9eca480509814d0fd038a231b940 Signed-off-by: Jason Lowe-Power Reviewed-on: https://gem5-review.googlesource.com/8902 Reviewed-by: Gabe Black Reviewed-by: Brandon Potter Maintainer: Brandon Potter --- diff --git a/src/kern/linux/linux.cc b/src/kern/linux/linux.cc index bd0b4d09a..d571b81a1 100644 --- a/src/kern/linux/linux.cc +++ b/src/kern/linux/linux.cc @@ -55,6 +55,9 @@ Linux::openSpecialFile(std::string path, Process *process, } else if (path.compare(0, 11, "/etc/passwd") == 0) { data = Linux::etcPasswd(process, tc); matched = true; + } else if (path.compare(0, 30, "/sys/devices/system/cpu/online") == 0) { + data = Linux::cpuOnline(process, tc); + matched = true; } if (matched) { @@ -87,3 +90,10 @@ Linux::etcPasswd(Process *process, ThreadContext *tc) return csprintf("gem5-user:x:1000:1000:gem5-user,,,:%s:/bin/bash\n", process->getcwd()); } + +std::string +Linux::cpuOnline(Process *process, ThreadContext *tc) +{ + return csprintf("0-%d\n", + tc->getSystemPtr()->numContexts() - 1); +} diff --git a/src/kern/linux/linux.hh b/src/kern/linux/linux.hh index b24ee3895..a1df99467 100644 --- a/src/kern/linux/linux.hh +++ b/src/kern/linux/linux.hh @@ -227,6 +227,7 @@ class Linux : public OperatingSystem ThreadContext *tc); static std::string procMeminfo(Process *process, ThreadContext *tc); static std::string etcPasswd(Process *process, ThreadContext *tc); + static std::string cpuOnline(Process *process, ThreadContext *tc); // For futex system call static const unsigned TGT_FUTEX_WAIT = 0;