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:
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user