summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/arm/kvm/gic.cc8
-rw-r--r--src/arch/arm/linux/system.cc3
-rw-r--r--src/sim/system.cc17
-rw-r--r--src/sim/system.hh7
4 files changed, 15 insertions, 20 deletions
diff --git a/src/arch/arm/kvm/gic.cc b/src/arch/arm/kvm/gic.cc
index 887fa8d69..d2423a6ec 100644
--- a/src/arch/arm/kvm/gic.cc
+++ b/src/arch/arm/kvm/gic.cc
@@ -305,7 +305,7 @@ void
MuxingKvmGic::copyBankedDistRange(BaseGicRegisters* from, BaseGicRegisters* to,
Addr daddr, size_t size)
{
- for (int ctx = 0; ctx < system._numContexts; ++ctx)
+ for (int ctx = 0; ctx < system.numContexts(); ++ctx)
for (auto a = daddr; a < daddr + size; a += 4)
copyDistRegister(from, to, ctx, a);
}
@@ -314,7 +314,7 @@ void
MuxingKvmGic::clearBankedDistRange(BaseGicRegisters* to,
Addr daddr, size_t size)
{
- for (int ctx = 0; ctx < system._numContexts; ++ctx)
+ for (int ctx = 0; ctx < system.numContexts(); ++ctx)
for (auto a = daddr; a < daddr + size; a += 4)
to->writeDistributor(ctx, a, 0xFFFFFFFF);
}
@@ -345,7 +345,7 @@ MuxingKvmGic::copyGicState(BaseGicRegisters* from, BaseGicRegisters* to)
// Copy CPU Interface Control Register (CTLR),
// Interrupt Priority Mask Register (PMR), and
// Binary Point Register (BPR)
- for (int ctx = 0; ctx < system._numContexts; ++ctx) {
+ for (int ctx = 0; ctx < system.numContexts(); ++ctx) {
copyCpuRegister(from, to, ctx, GICC_CTLR);
copyCpuRegister(from, to, ctx, GICC_PMR);
copyCpuRegister(from, to, ctx, GICC_BPR);
@@ -423,7 +423,7 @@ MuxingKvmGic::fromKvmToPl390()
// have been shifted by three bits due to its having been emulated by
// a VGIC with only 5 PMR bits in its VMCR register. Presently the
// Linux kernel does not repair this inaccuracy, so we correct it here.
- for (int cpu = 0; cpu < system._numContexts; ++cpu) {
+ for (int cpu = 0; cpu < system.numContexts(); ++cpu) {
cpuPriority[cpu] <<= 3;
assert((cpuPriority[cpu] & ~0xff) == 0);
}
diff --git a/src/arch/arm/linux/system.cc b/src/arch/arm/linux/system.cc
index 7f0647512..094e4d7a7 100644
--- a/src/arch/arm/linux/system.cc
+++ b/src/arch/arm/linux/system.cc
@@ -250,8 +250,7 @@ LinuxArmSystem::startup()
std::string task_filename = "tasks.txt";
taskFile = simout.create(name() + "." + task_filename);
- for (int i = 0; i < _numContexts; i++) {
- ThreadContext *tc = threadContexts[i];
+ for (const auto tc : threadContexts) {
uint32_t pid = tc->getCpuPtr()->getPid();
if (pid != BaseCPU::invldPid) {
mapPid(tc, pid);
diff --git a/src/sim/system.cc b/src/sim/system.cc
index ed01e0e64..38eed1c2a 100644
--- a/src/sim/system.cc
+++ b/src/sim/system.cc
@@ -47,6 +47,8 @@
#include "sim/system.hh"
+#include <algorithm>
+
#include "arch/remote_gdb.hh"
#include "arch/utility.hh"
#include "base/loader/object_file.hh"
@@ -87,7 +89,6 @@ int System::numSystemsRunning = 0;
System::System(Params *p)
: MemObject(p), _systemPort("system_port", this),
- _numContexts(0),
multiThread(p->multi_thread),
pagePtr(0),
init_param(p->init_param),
@@ -256,7 +257,6 @@ System::registerThreadContext(ThreadContext *tc, ContextID assigned)
"Cannot have two CPUs with the same id (%d)\n", id);
threadContexts[id] = tc;
- _numContexts++;
#if THE_ISA != NULL_ISA
int port = getRemoteGDBPort();
@@ -287,12 +287,13 @@ System::registerThreadContext(ThreadContext *tc, ContextID assigned)
int
System::numRunningContexts()
{
- int running = 0;
- for (int i = 0; i < _numContexts; ++i) {
- if (threadContexts[i]->status() != ThreadContext::Halted)
- ++running;
- }
- return running;
+ return std::count_if(
+ threadContexts.cbegin(),
+ threadContexts.cend(),
+ [] (ThreadContext* tc) {
+ return tc->status() != ThreadContext::Halted;
+ }
+ );
}
void
diff --git a/src/sim/system.hh b/src/sim/system.hh
index 5b0c17872..a72f2a762 100644
--- a/src/sim/system.hh
+++ b/src/sim/system.hh
@@ -196,7 +196,6 @@ class System : public MemObject
#endif
std::vector<ThreadContext *> threadContexts;
- int _numContexts;
const bool multiThread;
ThreadContext *getThreadContext(ContextID tid)
@@ -204,11 +203,7 @@ class System : public MemObject
return threadContexts[tid];
}
- int numContexts()
- {
- assert(_numContexts == (int)threadContexts.size());
- return _numContexts;
- }
+ unsigned numContexts() const { return threadContexts.size(); }
/** Return number of running (non-halted) thread contexts in
* system. These threads could be Active or Suspended. */