kvm, x86: Guard x86-specific APIs in KvmVM

Protect x86-specific APIs in KvmVM with compile-time guards to avoid
breaking ARM builds.
This commit is contained in:
Andreas Sandberg
2015-05-23 13:37:20 +01:00
parent 12e91f701b
commit ed447bbff9
2 changed files with 26 additions and 17 deletions

View 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
{

View 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;
};