sim-se: Add /sys/devices/system/cpu/online file
authorJason Lowe-Power <jason@lowepower.com>
Tue, 25 Jul 2017 18:12:27 +0000 (13:12 -0500)
committerJason Lowe-Power <jason@lowepower.com>
Thu, 15 Mar 2018 20:45:34 +0000 (20:45 +0000)
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 <jason@lowepower.com>
Reviewed-on: https://gem5-review.googlesource.com/8902
Reviewed-by: Gabe Black <gabeblack@google.com>
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Maintainer: Brandon Potter <Brandon.Potter@amd.com>

src/kern/linux/linux.cc
src/kern/linux/linux.hh

index bd0b4d09a099ed3d57ccf47e059a80c4cfd8c060..d571b81a194615e1668f261ed43be29f38bf2b00 100644 (file)
@@ -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);
+}
index b24ee389525108ed169475b125c50a9765ef4c75..a1df99467bfc6c0e7005ef1a4a24fd9a5d896023 100644 (file)
@@ -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;