From ed447bbff97eb74779ff891734664ef16d4fe646 Mon Sep 17 00:00:00 2001 From: Andreas Sandberg Date: Sat, 23 May 2015 13:37:20 +0100 Subject: kvm, x86: Guard x86-specific APIs in KvmVM Protect x86-specific APIs in KvmVM with compile-time guards to avoid breaking ARM builds. --- src/cpu/kvm/vm.cc | 13 +++++-------- src/cpu/kvm/vm.hh | 30 +++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/cpu/kvm/vm.cc b/src/cpu/kvm/vm.cc index 4ef11b2ee..01670fab4 100644 --- a/src/cpu/kvm/vm.cc +++ b/src/cpu/kvm/vm.cc @@ -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 { diff --git a/src/cpu/kvm/vm.hh b/src/cpu/kvm/vm.hh index 84d526705..4710f2447 100644 --- a/src/cpu/kvm/vm.hh +++ b/src/cpu/kvm/vm.hh @@ -75,9 +75,6 @@ class Kvm friend class KvmVM; public: - typedef std::vector CPUIDVector; - typedef std::vector 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 CPUIDVector; + typedef std::vector 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; }; -- cgit v1.2.3