summaryrefslogtreecommitdiff
path: root/src/cpu/kvm/vm.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/kvm/vm.hh')
-rw-r--r--src/cpu/kvm/vm.hh52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/cpu/kvm/vm.hh b/src/cpu/kvm/vm.hh
index 67e8e4cbd..660805ed7 100644
--- a/src/cpu/kvm/vm.hh
+++ b/src/cpu/kvm/vm.hh
@@ -40,6 +40,8 @@
#ifndef __CPU_KVM_KVMVM_HH__
#define __CPU_KVM_KVMVM_HH__
+#include <vector>
+
#include "base/addr_range.hh"
#include "sim/sim_object.hh"
@@ -72,6 +74,9 @@ class Kvm
friend class KvmVM;
public:
+ typedef std::vector<struct kvm_cpuid_entry2> CPUIDVector;
+ typedef std::vector<uint32_t> MSRIndexVector;
+
virtual ~Kvm();
Kvm *create();
@@ -117,6 +122,18 @@ class Kvm
* @see KvmVM::createIRQChip()
*/
bool capIRQChip() const;
+
+ /** Support for getting and setting the kvm_vcpu_events structure. */
+ bool capVCPUEvents() const;
+
+ /** Support for getting and setting the kvm_debugregs structure. */
+ bool capDebugRegs() const;
+
+ /** Support for getting and setting the x86 XCRs. */
+ bool capXCRs() const;
+
+ /** Support for getting and setting the kvm_xsave structure. */
+ bool capXSave() const;
/** @} */
/**
@@ -128,6 +145,35 @@ class Kvm
*/
bool getSupportedCPUID(struct kvm_cpuid2 &cpuid) const;
+ /**
+ * Get the CPUID features supported by the hardware and Kvm.
+ *
+ * @note Requires capExtendedCPUID().
+ *
+ * @note This method uses an internal cache to minimize the number
+ * of calls into the kernel.
+ *
+ * @return Reference to cached MSR index list.
+ */
+ const CPUIDVector &getSupportedCPUID() const;
+
+ /**
+ * Get the MSRs supported by the hardware and Kvm.
+ *
+ * @return False if the allocation is too small, true on success.
+ */
+ bool getSupportedMSRs(struct kvm_msr_list &msrs) const;
+
+ /**
+ * Get the MSRs supported by the hardware and Kvm.
+ *
+ * @note This method uses an internal cache to minimize the number
+ * of calls into the kernel.
+ *
+ * @return Reference to cached MSR index list.
+ */
+ const MSRIndexVector &getSupportedMSRs() const;
+
protected:
/**
* Check for the presence of an extension to the KVM API.
@@ -186,6 +232,12 @@ 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;
};