kvm: move Kvm check from ARM Kvm GIC to System
The check was nearly completely generic anyway, with the exception of the Kvm CPU type. This will make it easier for other parts of the codebase to do similar checks. Change-Id: Ibfdd3d65e9e6cc3041b53b73adfabee1999283da Reviewed-on: https://gem5-review.googlesource.com/3540 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
committed by
Andreas Sandberg
parent
97187fa814
commit
b829b4a8e4
@@ -189,7 +189,7 @@ void
|
||||
MuxingKvmGic::startup()
|
||||
{
|
||||
Pl390::startup();
|
||||
usingKvm = (kernelGic != nullptr) && validKvmEnvironment();
|
||||
usingKvm = (kernelGic != nullptr) && system.validKvmEnvironment();
|
||||
if (usingKvm)
|
||||
fromPl390ToKvm();
|
||||
}
|
||||
@@ -206,7 +206,7 @@ void
|
||||
MuxingKvmGic::drainResume()
|
||||
{
|
||||
Pl390::drainResume();
|
||||
bool use_kvm = (kernelGic != nullptr) && validKvmEnvironment();
|
||||
bool use_kvm = (kernelGic != nullptr) && system.validKvmEnvironment();
|
||||
if (use_kvm != usingKvm) {
|
||||
// Should only occur due to CPU switches
|
||||
if (use_kvm) // from simulation to KVM emulation
|
||||
@@ -287,20 +287,6 @@ MuxingKvmGic::clearPPInt(uint32_t num, uint32_t cpu)
|
||||
kernelGic->clearPPI(cpu, num);
|
||||
}
|
||||
|
||||
bool
|
||||
MuxingKvmGic::validKvmEnvironment() const
|
||||
{
|
||||
if (system.threadContexts.empty())
|
||||
return false;
|
||||
|
||||
for (auto tc : system.threadContexts) {
|
||||
if (dynamic_cast<BaseArmKvmCPU*>(tc->getCpuPtr()) == nullptr) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
MuxingKvmGic::copyDistRegister(BaseGicRegisters* from, BaseGicRegisters* to,
|
||||
ContextID ctx, Addr daddr)
|
||||
|
||||
@@ -195,9 +195,6 @@ class MuxingKvmGic : public Pl390
|
||||
void clearPPInt(uint32_t num, uint32_t cpu) override;
|
||||
|
||||
protected:
|
||||
/** Verify gem5 configuration will support KVM emulation */
|
||||
bool validKvmEnvironment() const;
|
||||
|
||||
/** System this interrupt controller belongs to */
|
||||
System &system;
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
#include "base/trace.hh"
|
||||
#include "config/use_kvm.hh"
|
||||
#if USE_KVM
|
||||
#include "cpu/kvm/base.hh"
|
||||
#include "cpu/kvm/vm.hh"
|
||||
#endif
|
||||
#include "cpu/thread_context.hh"
|
||||
@@ -335,6 +336,24 @@ System::replaceThreadContext(ThreadContext *tc, ContextID context_id)
|
||||
remoteGDB[context_id]->replaceThreadContext(tc);
|
||||
}
|
||||
|
||||
bool
|
||||
System::validKvmEnvironment() const
|
||||
{
|
||||
#if USE_KVM
|
||||
if (threadContexts.empty())
|
||||
return false;
|
||||
|
||||
for (auto tc : threadContexts) {
|
||||
if (dynamic_cast<BaseKvmCPU*>(tc->getCpuPtr()) == nullptr) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
Addr
|
||||
System::allocPhysPages(int npages)
|
||||
{
|
||||
|
||||
@@ -262,6 +262,9 @@ class System : public MemObject
|
||||
return kvmVM;
|
||||
}
|
||||
|
||||
/** Verify gem5 configuration will support KVM emulation */
|
||||
bool validKvmEnvironment() const;
|
||||
|
||||
/** Get a pointer to access the physical memory of the system */
|
||||
PhysicalMemory& getPhysMem() { return physmem; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user