diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2015-05-23 13:37:20 +0100 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2015-05-23 13:37:20 +0100 |
commit | ed447bbff97eb74779ff891734664ef16d4fe646 (patch) | |
tree | 361a5c6047eeef1df53bf799d65072879832bbf0 | |
parent | 12e91f701b4d4ecfd1a7d9ed92ed1e11c06bb69c (diff) | |
download | gem5-ed447bbff97eb74779ff891734664ef16d4fe646.tar.xz |
kvm, x86: Guard x86-specific APIs in KvmVM
Protect x86-specific APIs in KvmVM with compile-time guards to avoid
breaking ARM builds.
-rw-r--r-- | src/cpu/kvm/vm.cc | 13 | ||||
-rw-r--r-- | src/cpu/kvm/vm.hh | 30 |
2 files changed, 26 insertions, 17 deletions
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<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; }; |