Hi David, On 12/10/20 4:22 PM, David Woodhouse wrote:
On Thu, 2020-12-10 at 08:46 +0800, Lu Baolu wrote:+/* + * We want to figure out which context we are running in. But the hardware + * does not introduce a reliable way (instruction, CPUID leaf, MSR, whatever) + * which can be manipulated by the VMM to let the OS figure out where it runs. + * So we go with the below probably_on_bare_metal() function as a replacement + * for definitely_on_bare_metal() to go forward only for the very simple reason + * that this is the only option we have. + */ +static const char * const possible_vmm_vendor_name[] = { + "QEMU", "Bochs", "KVM", "Xen", "VMware", "VMW", "VMware Inc.", + "innotek GmbH", "Oracle Corporation", "Parallels", "BHYVE", + "Microsoft Corporation" +};People do use SeaBIOS ("Bochs") on bare metal.
Is there any unique way to distinguish between running on bare metal and VM?
You'll also see "Amazon EC2" on virt instances as well as bare metal instances. Although in that case I believe the virt instances do have the 'virtual machine' flag set in bit 4 of the BIOS Characteristics Extension Byte 2, and the bare metal obviously don't.
So for Amazon EC2 case, we can use this byte to distinguish. Can you please point me to the references of this Extension Byte (reference code/spec or anything else) ? Best regards, baolu

