From df26b428b16531e71a4d581f88bd889fefafad57 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Tue, 29 Sep 2020 18:12:34 +0100 Subject: [PATCH] arch: x86_64: Copy CPU identification string into guest cpuid This is stored in leaves 0x80000002 to 0x80000004 inclusive. Signed-off-by: Rob Bradford --- arch/src/x86_64/mod.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/arch/src/x86_64/mod.rs b/arch/src/x86_64/mod.rs index 8e862579a..95f90553a 100644 --- a/arch/src/x86_64/mod.rs +++ b/arch/src/x86_64/mod.rs @@ -25,6 +25,7 @@ use vm_memory::{ GuestMemoryMmap, GuestMemoryRegion, GuestUsize, }; mod smbios; +use std::arch::x86_64; #[derive(Debug, Copy, Clone)] pub enum BootProtocol { @@ -393,6 +394,22 @@ pub fn configure_vcpu( } } + // Copy CPU identification string + for i in 0x8000_0002..=0x8000_0004 { + cpuid.retain(|c| c.function != i); + let leaf = unsafe { x86_64::__cpuid(i) }; + cpuid + .push(CpuIdEntry { + function: i, + eax: leaf.eax, + ebx: leaf.ebx, + ecx: leaf.ecx, + edx: leaf.edx, + ..Default::default() + }) + .map_err(|_| Error::PopulatingCpuid)?; + } + fd.set_cpuid2(&cpuid) .map_err(|e| Error::SetSupportedCpusFailed(e.into()))?; @@ -808,7 +825,6 @@ pub fn initramfs_load_addr( } pub fn get_host_cpu_phys_bits() -> u8 { - use std::arch::x86_64; unsafe { let leaf = x86_64::__cpuid(0x8000_0000);