On Thu, Mar 12, 2020 at 06:54:26PM +0200, Liran Alon wrote: > Similar to CMD_GETTIME but lacks the 136-year overflow issue, > by returning full 64-bit of host uSeconds. > > Reviewed-by: Nikita Leshenko <nikita.leshche...@oracle.com> > Signed-off-by: Liran Alon <liran.a...@oracle.com> > --- > hw/i386/vmport.c | 17 +++++++++++++++++ > include/hw/i386/vmport.h | 1 + > 2 files changed, 18 insertions(+) > > diff --git a/hw/i386/vmport.c b/hw/i386/vmport.c > index c5b659c59343..7e57eda4b526 100644 > --- a/hw/i386/vmport.c > +++ b/hw/i386/vmport.c > @@ -183,6 +183,22 @@ static uint32_t vmport_cmd_time(void *opaque, uint32_t > addr) > return (uint32_t)tv.tv_sec; > } > > +static uint32_t vmport_cmd_time_full(void *opaque, uint32_t addr) > +{ > + X86CPU *cpu = X86_CPU(current_cpu); > + qemu_timeval tv; > + > + if (qemu_gettimeofday(&tv) < 0) { > + return UINT32_MAX; > + } > + > + cpu->env.regs[R_ESI] = (uint32_t)((uint64_t)tv.tv_sec >> 32); > + cpu->env.regs[R_EDX] = (uint32_t)tv.tv_sec; > + cpu->env.regs[R_EBX] = (uint32_t)tv.tv_usec; > + cpu->env.regs[R_ECX] = port_state->max_time_lag_us; > + return VMPORT_MAGIC; > +} > + > /* vmmouse helpers */ > void vmmouse_get_data(uint32_t *data) > {
And with usec precision, same comments apply in an even stronger way. > @@ -230,6 +246,7 @@ static void vmport_realizefn(DeviceState *dev, Error > **errp) > if (s->compat_flags & VMPORT_COMPAT_CMDS_V2) { > 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); > } > } > > diff --git a/include/hw/i386/vmport.h b/include/hw/i386/vmport.h > index 50416c8c8f3e..5d19963ed417 100644 > --- a/include/hw/i386/vmport.h > +++ b/include/hw/i386/vmport.h > @@ -12,6 +12,7 @@ typedef enum { > VMPORT_CMD_VMMOUSE_DATA = 39, > VMPORT_CMD_VMMOUSE_STATUS = 40, > VMPORT_CMD_VMMOUSE_COMMAND = 41, > + VMPORT_CMD_GETTIMEFULL = 46, > VMPORT_ENTRIES > } VMPortCommand; > > -- > 2.20.1