On Tue, Mar 10, 2020 at 01:54:04AM +0200, Liran Alon wrote: > This is VMware documented functionallity that some guests rely on. > Returns the BIOS UUID of the current virtual machine. > > Reviewed-by: Nikita Leshenko <nikita.leshche...@oracle.com> > Signed-off-by: Liran Alon <liran.a...@oracle.com>
So this at least seems guest-visible. So I suspect you need to add properties to disable this for old machine types, to avoid breaking compatibility with live-migration. > --- > hw/i386/vmport.c | 14 ++++++++++++++ > include/hw/i386/pc.h | 1 + > 2 files changed, 15 insertions(+) > > diff --git a/hw/i386/vmport.c b/hw/i386/vmport.c > index 2ae5afc42b50..7687f3368a55 100644 > --- a/hw/i386/vmport.c > +++ b/hw/i386/vmport.c > @@ -26,6 +26,7 @@ > #include "hw/i386/pc.h" > #include "hw/input/i8042.h" > #include "hw/qdev-properties.h" > +#include "sysemu/sysemu.h" > #include "sysemu/hw_accel.h" > #include "qemu/log.h" > #include "trace.h" > @@ -121,6 +122,18 @@ static uint32_t vmport_cmd_get_version(void *opaque, > uint32_t addr) > return port_state->vmx_version; > } > > +static uint32_t vmport_cmd_get_bios_uuid(void *opaque, uint32_t addr) > +{ > + X86CPU *cpu = X86_CPU(current_cpu); > + uint32_t *uuid_parts = (uint32_t*)(qemu_uuid.data); > + > + cpu->env.regs[R_EAX] = uuid_parts[0]; > + cpu->env.regs[R_EBX] = uuid_parts[1]; > + cpu->env.regs[R_ECX] = uuid_parts[2]; > + cpu->env.regs[R_EDX] = uuid_parts[3]; > + return cpu->env.regs[R_EAX]; > +} > + > static uint32_t vmport_cmd_ram_size(void *opaque, uint32_t addr) > { > X86CPU *cpu = X86_CPU(current_cpu); > @@ -171,6 +184,7 @@ static void vmport_realizefn(DeviceState *dev, Error > **errp) > port_state = s; > /* Register some generic port commands */ > vmport_register(VMPORT_CMD_GETVERSION, vmport_cmd_get_version, NULL); > + vmport_register(VMPORT_CMD_GETBIOSUUID, vmport_cmd_get_bios_uuid, NULL); > vmport_register(VMPORT_CMD_GETRAMSIZE, vmport_cmd_ram_size, NULL); > } > > diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h > index 7f15a01137b1..ea87eb93511e 100644 > --- a/include/hw/i386/pc.h > +++ b/include/hw/i386/pc.h > @@ -140,6 +140,7 @@ typedef uint32_t (VMPortReadFunc)(void *opaque, uint32_t > address); > > typedef enum { > VMPORT_CMD_GETVERSION = 10, > + VMPORT_CMD_GETBIOSUUID = 19, > VMPORT_CMD_GETRAMSIZE = 20, > VMPORT_CMD_VMMOUSE_DATA = 39, > VMPORT_CMD_VMMOUSE_STATUS = 40, > -- > 2.20.1