diff --git a/arch/src/x86_64/regs.rs b/arch/src/x86_64/regs.rs index 77e74289d..99f33142b 100644 --- a/arch/src/x86_64/regs.rs +++ b/arch/src/x86_64/regs.rs @@ -242,68 +242,43 @@ fn setup_page_tables(mem: &GuestMemoryMmap, sregs: &mut kvm_sregs) -> Result<()> Ok(()) } +macro_rules! kvm_msr { + ($msr:expr) => { + kvm_msr_entry { + index: $msr, + data: 0x0, + ..Default::default() + } + }; +} + +macro_rules! kvm_msr_data { + ($msr:expr, $data:expr) => { + kvm_msr_entry { + index: $msr, + data: $data, + ..Default::default() + } + }; +} + fn create_msr_entries() -> Msrs { - let mut entries = Vec::::new(); - - entries.push(kvm_msr_entry { - index: msr_index::MSR_IA32_SYSENTER_CS, - data: 0x0, - ..Default::default() - }); - entries.push(kvm_msr_entry { - index: msr_index::MSR_IA32_SYSENTER_ESP, - data: 0x0, - ..Default::default() - }); - entries.push(kvm_msr_entry { - index: msr_index::MSR_IA32_SYSENTER_EIP, - data: 0x0, - ..Default::default() - }); - // x86_64 specific msrs, we only run on x86_64 not x86. - entries.push(kvm_msr_entry { - index: msr_index::MSR_STAR, - data: 0x0, - ..Default::default() - }); - entries.push(kvm_msr_entry { - index: msr_index::MSR_CSTAR, - data: 0x0, - ..Default::default() - }); - entries.push(kvm_msr_entry { - index: msr_index::MSR_KERNEL_GS_BASE, - data: 0x0, - ..Default::default() - }); - entries.push(kvm_msr_entry { - index: msr_index::MSR_SYSCALL_MASK, - data: 0x0, - ..Default::default() - }); - entries.push(kvm_msr_entry { - index: msr_index::MSR_LSTAR, - data: 0x0, - ..Default::default() - }); - // end of x86_64 specific code - entries.push(kvm_msr_entry { - index: msr_index::MSR_IA32_TSC, - data: 0x0, - ..Default::default() - }); - entries.push(kvm_msr_entry { - index: msr_index::MSR_IA32_MISC_ENABLE, - data: msr_index::MSR_IA32_MISC_ENABLE_FAST_STRING as u64, - ..Default::default() - }); - entries.push(kvm_msr_entry { - index: msr_index::MSR_MTRRdefType, - data: MTRR_ENABLE | MTRR_MEM_TYPE_WB, - ..Default::default() - }); - - Msrs::from_entries(&entries) + Msrs::from_entries(&[ + kvm_msr!(msr_index::MSR_IA32_SYSENTER_CS), + kvm_msr!(msr_index::MSR_IA32_SYSENTER_ESP), + kvm_msr!(msr_index::MSR_IA32_SYSENTER_EIP), + kvm_msr!(msr_index::MSR_STAR), + kvm_msr!(msr_index::MSR_CSTAR), + kvm_msr!(msr_index::MSR_LSTAR), + kvm_msr!(msr_index::MSR_KERNEL_GS_BASE), + kvm_msr!(msr_index::MSR_SYSCALL_MASK), + kvm_msr!(msr_index::MSR_IA32_TSC), + kvm_msr_data!( + msr_index::MSR_IA32_MISC_ENABLE, + msr_index::MSR_IA32_MISC_ENABLE_FAST_STRING as u64 + ), + kvm_msr_data!(msr_index::MSR_MTRRdefType, MTRR_ENABLE | MTRR_MEM_TYPE_WB), + ]) } #[cfg(test)]