kvm, x86: Guard x86-specific APIs in KvmVM
authorAndreas Sandberg <andreas.sandberg@arm.com>
Sat, 23 May 2015 12:37:20 +0000 (13:37 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Sat, 23 May 2015 12:37:20 +0000 (13:37 +0100)
Protect x86-specific APIs in KvmVM with compile-time guards to avoid
breaking ARM builds.

src/cpu/kvm/vm.cc
src/cpu/kvm/vm.hh

index 4ef11b2ee9a952e835a28e881182da14be4651bb..01670fab40e01bcd72a2c221987c79162c4e7a37 100644 (file)
@@ -191,10 +191,11 @@ Kvm::capXSave() const
 #endif
 }
 
+
+#if defined(__i386__) || defined(__x86_64__)
 bool
 Kvm::getSupportedCPUID(struct kvm_cpuid2 &cpuid) const
 {
-#if defined(__i386__) || defined(__x86_64__)
     if (ioctl(KVM_GET_SUPPORTED_CPUID, (void *)&cpuid) == -1) {
         if (errno == E2BIG)
             return false;
@@ -202,9 +203,6 @@ Kvm::getSupportedCPUID(struct kvm_cpuid2 &cpuid) const
             panic("KVM: Failed to get supported CPUID (errno: %i)\n", errno);
     } else
         return true;
-#else
-    panic("KVM: getSupportedCPUID is unsupported on this platform.\n");
-#endif
 }
 
 const Kvm::CPUIDVector &
@@ -230,7 +228,6 @@ Kvm::getSupportedCPUID() const
 bool
 Kvm::getSupportedMSRs(struct kvm_msr_list &msrs) const
 {
-#if defined(__i386__) || defined(__x86_64__)
     if (ioctl(KVM_GET_MSR_INDEX_LIST, (void *)&msrs) == -1) {
         if (errno == E2BIG)
             return false;
@@ -238,9 +235,6 @@ Kvm::getSupportedMSRs(struct kvm_msr_list &msrs) const
             panic("KVM: Failed to get supported CPUID (errno: %i)\n", errno);
     } else
         return true;
-#else
-    panic("KVM: getSupportedCPUID is unsupported on this platform.\n");
-#endif
 }
 
 const Kvm::MSRIndexVector &
@@ -262,6 +256,9 @@ Kvm::getSupportedMSRs() const
     return supportedMSRCache;
 }
 
+#endif // x86-specific
+
+
 int
 Kvm::checkExtension(int extension) const
 {
index 84d526705c45c71244d71f96b4d4b6fa2657443b..4710f2447be7198f83adbfeef6d0fe82fa3c62c4 100644 (file)
@@ -75,9 +75,6 @@ class Kvm
     friend class KvmVM;
 
   public:
-    typedef std::vector<struct kvm_cpuid_entry2> CPUIDVector;
-    typedef std::vector<uint32_t> MSRIndexVector;
-
     virtual ~Kvm();
 
     Kvm *create();
@@ -143,6 +140,16 @@ class Kvm
     bool capXSave() const;
     /** @} */
 
+#if defined(__i386__) || defined(__x86_64__)
+  public: // x86-specific
+    /**
+     * @{
+     * @name X86-specific APIs
+     */
+
+    typedef std::vector<struct kvm_cpuid_entry2> CPUIDVector;
+    typedef std::vector<uint32_t> MSRIndexVector;
+
     /**
      * Get the CPUID features supported by the hardware and Kvm.
      *
@@ -181,6 +188,17 @@ class Kvm
      */
     const MSRIndexVector &getSupportedMSRs() const;
 
+  private: // x86-specific
+    /** Cached vector of supported CPUID entries. */
+    mutable CPUIDVector supportedCPUIDCache;
+
+    /** Cached vector of supported MSRs. */
+    mutable MSRIndexVector supportedMSRCache;
+
+
+    /** @} */
+#endif
+
   protected:
     /**
      * Check for the presence of an extension to the KVM API.
@@ -239,12 +257,6 @@ class Kvm
     /** Size of the MMAPed vCPU parameter area. */
     int vcpuMMapSize;
 
-    /** Cached vector of supported CPUID entries. */
-    mutable CPUIDVector supportedCPUIDCache;
-
-    /** Cached vector of supported MSRs. */
-    mutable MSRIndexVector supportedMSRCache;
-
     /** Singleton instance */
     static Kvm *instance;
 };