Message ID | 20200312165431.82118-13-liran.alon@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | : hw/i386/vmport: Bug fixes and improvements | expand |
On Thu, Mar 12, 2020 at 06:54:27PM +0200, Liran Alon wrote: > 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.leshchenko@oracle.com> > Signed-off-by: Liran Alon <liran.alon@oracle.com> > --- > hw/i386/vmport.c | 14 ++++++++++++++ > include/hw/i386/vmport.h | 1 + > 2 files changed, 15 insertions(+) > > diff --git a/hw/i386/vmport.c b/hw/i386/vmport.c > index 7e57eda4b526..2ce78aaf7b4c 100644 > --- a/hw/i386/vmport.c > +++ b/hw/i386/vmport.c > @@ -55,6 +55,13 @@ > #define VMPORT_COMPAT_CMDS_V2 \ > (1 << VMPORT_COMPAT_CMDS_V2_BIT) > > +/* 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 { Prefix with VMPORT_ please, and add comments. > @@ -199,6 +206,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) > { > @@ -247,6 +259,8 @@ static void vmport_realizefn(DeviceState *dev, Error **errp) > vmport_register(VMPORT_CMD_GETBIOSUUID, vmport_cmd_get_bios_uuid, 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); > } > } > > diff --git a/include/hw/i386/vmport.h b/include/hw/i386/vmport.h > index 5d19963ed417..34cc050b1ffa 100644 > --- a/include/hw/i386/vmport.h > +++ b/include/hw/i386/vmport.h > @@ -13,6 +13,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
On 13/03/2020 2:09, Michael S. Tsirkin wrote: > On Thu, Mar 12, 2020 at 06:54:27PM +0200, Liran Alon wrote: >> 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.leshchenko@oracle.com> >> Signed-off-by: Liran Alon <liran.alon@oracle.com> >> --- >> hw/i386/vmport.c | 14 ++++++++++++++ >> include/hw/i386/vmport.h | 1 + >> 2 files changed, 15 insertions(+) >> >> diff --git a/hw/i386/vmport.c b/hw/i386/vmport.c >> index 7e57eda4b526..2ce78aaf7b4c 100644 >> --- a/hw/i386/vmport.c >> +++ b/hw/i386/vmport.c >> @@ -55,6 +55,13 @@ >> #define VMPORT_COMPAT_CMDS_V2 \ >> (1 << VMPORT_COMPAT_CMDS_V2_BIT) >> >> +/* 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 { > > Prefix with VMPORT_ please, and add comments. Ok regarding prefix. Which comments do you expect? What every flag means? Sure. -Liran
diff --git a/hw/i386/vmport.c b/hw/i386/vmport.c index 7e57eda4b526..2ce78aaf7b4c 100644 --- a/hw/i386/vmport.c +++ b/hw/i386/vmport.c @@ -55,6 +55,13 @@ #define VMPORT_COMPAT_CMDS_V2 \ (1 << VMPORT_COMPAT_CMDS_V2_BIT) +/* 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 { @@ -199,6 +206,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) { @@ -247,6 +259,8 @@ static void vmport_realizefn(DeviceState *dev, Error **errp) vmport_register(VMPORT_CMD_GETBIOSUUID, vmport_cmd_get_bios_uuid, 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); } } diff --git a/include/hw/i386/vmport.h b/include/hw/i386/vmport.h index 5d19963ed417..34cc050b1ffa 100644 --- a/include/hw/i386/vmport.h +++ b/include/hw/i386/vmport.h @@ -13,6 +13,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;