mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
arch: Introduce MSR CPU profile data
We introduce a type describing MSR adjustments associated with a CPU profile. The upcoming CPU profile generation tool will serialize instances of this struct when generating a CPU profile. A follow up PR will take care of filling out the currently stubbed `msr_data` method. Signed-off-by: Oliver Anderson <oliver.anderson@cyberus-technology.de> On-behalf-of: SAP oliver.anderson@sap.com
This commit is contained in:
committed by
Rob Bradford
parent
26305445b6
commit
67c758b1ac
@@ -9,6 +9,7 @@ use hypervisor::arch::x86::CpuIdEntry;
|
||||
use crate::x86_64::cpu_profile::cpuid_adjustments::{
|
||||
CpuidOutputRegisterAdjustments, CpuidProfileData, MissingCpuidEntriesError,
|
||||
};
|
||||
use crate::x86_64::cpu_profile::msr_adjustments::MsrProfileData;
|
||||
use crate::x86_64::{AMX_TILECFG_BIT, AMX_TILEDATA_BIT, CpuidReg};
|
||||
|
||||
/// Mask indicating availability of the AMX TILECFG state component
|
||||
@@ -64,6 +65,13 @@ impl CpuProfile {
|
||||
CpuProfile::Host => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Obtain MSR adjustment data related to the given CPU profile.
|
||||
fn msr_data(&self) -> Option<MsrProfileData> {
|
||||
match self {
|
||||
CpuProfile::Host => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// See [`CpuProfile::adjust_cpuid`](CpuProfile::adjust_cpuid)
|
||||
|
||||
@@ -89,3 +89,19 @@ impl FeatureMsrAdjustment {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Data describing MSR adjustments related to a CPU profile.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
|
||||
pub struct MsrProfileData {
|
||||
/// Describes feature MSR adjustments necessary to become compatible with
|
||||
/// the desired target.
|
||||
pub adjustments: Vec<(RegisterAddress, FeatureMsrAdjustment)>,
|
||||
/// List of the MSRs that the CPU profile requires.
|
||||
///
|
||||
/// When applying a CPU profile then the union of the sets of MSRs obtained
|
||||
/// from `Hypervisor::get_feature_msrs` and `Hypervisor::get_msr_index_list`
|
||||
/// must necessarily contain all MSRs listed here. Otherwise the host is
|
||||
/// considered incompatible with the CPU profile. Exceptions are made for
|
||||
/// missing Hyper-V MSRs when `kvm_hyperv=off`.
|
||||
pub required_msrs: Vec<RegisterAddress>,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user