kvm: move Kvm check from ARM Kvm GIC to System
authorCurtis Dunham <Curtis.Dunham@arm.com>
Wed, 17 May 2017 21:34:04 +0000 (21:34 +0000)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Wed, 5 Jul 2017 14:24:03 +0000 (14:24 +0000)
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>

src/arch/arm/kvm/gic.cc
src/arch/arm/kvm/gic.hh
src/sim/system.cc
src/sim/system.hh

index 7cf4d07c6a9801db8b2d4d449f9d1653f1f6c5f8..498b79faacef203efe4da56d30ac991ee501db53 100644 (file)
@@ -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)
index b5544486c528c2e403f9dce8a5d077f60327f6f2..ee04088d37123037213c2aa5d57e4f2679dd11bc 100644 (file)
@@ -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;
 
index 9315882b7d776826f8b0e40d833b9026b560bcee..e46c356113fbd103ab61b4134c49f4971e473eda 100644 (file)
@@ -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)
 {
index c3c178dbd6c3c330007043bb6c4ddab78c22fa4b..a656ab382fa83d2578b850d241b3b252e63eba27 100644 (file)
@@ -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; }