Command currently returns that it is unimplemented by setting the reserved-bit in it's return value.
Following patches will return various useful vCPU information to guest. Reviewed-by: Nikita Leshenko <nikita.leshche...@oracle.com> Signed-off-by: Liran Alon <liran.a...@oracle.com> --- hw/i386/vmport.c | 13 +++++++++++++ include/hw/i386/pc.h | 1 + 2 files changed, 14 insertions(+) diff --git a/hw/i386/vmport.c b/hw/i386/vmport.c index 26231fc9d718..b33ef9c01d65 100644 --- a/hw/i386/vmport.c +++ b/hw/i386/vmport.c @@ -42,6 +42,13 @@ typedef enum { VMX_TYPE_WORKSTATION_ENTERPRISE /* Deprecated type used for ACE 1.x */ } VMX_Type; +/* vCPU features reported by CMD_GET_VCPU_INFO */ +#define VCPU_INFO_SLC64_BIT 0 +#define VCPU_INFO_SYNC_VTSCS_BIT 1 +#define VCPU_INFO_HV_REPLAY_OK_BIT 2 +#define VCPU_INFO_LEGACY_X2APIC_BIT 3 +#define VCPU_INFO_RESERVED_BIT 31 + #define VMPORT(obj) OBJECT_CHECK(VMPortState, (obj), TYPE_VMPORT) typedef struct VMPortState { @@ -173,6 +180,11 @@ static uint32_t vmport_cmd_time_full(void *opaque, uint32_t addr) return VMPORT_MAGIC; } +static uint32_t vmport_cmd_get_vcpu_info(void *opaque, uint32_t addr) +{ + return (1 << VCPU_INFO_RESERVED_BIT); +} + /* vmmouse helpers */ void vmmouse_get_data(uint32_t *data) { @@ -219,6 +231,7 @@ static void vmport_realizefn(DeviceState *dev, Error **errp) vmport_register(VMPORT_CMD_GETRAMSIZE, vmport_cmd_ram_size, NULL); vmport_register(VMPORT_CMD_GETTIME, vmport_cmd_time, NULL); vmport_register(VMPORT_CMD_GETTIMEFULL, vmport_cmd_time_full, NULL); + vmport_register(VMPORT_CMD_GET_VCPU_INFO, vmport_cmd_get_vcpu_info, NULL); } static Property vmport_properties[] = { diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 14d321e3cbbe..e880ca39ee3b 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -147,6 +147,7 @@ typedef enum { VMPORT_CMD_VMMOUSE_STATUS = 40, VMPORT_CMD_VMMOUSE_COMMAND = 41, VMPORT_CMD_GETTIMEFULL = 46, + VMPORT_CMD_GET_VCPU_INFO = 68, VMPORT_ENTRIES } VMPortCommand; -- 2.20.1