Replace qemu_gettimeofday() with g_get_real_time()

GLib g_get_real_time() is an alternative to gettimeofday() which allows
to simplify our code.

For semihosting, a few bits are lost on POSIX host, but this shouldn't
be a big concern.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20220307070401.171986-5-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
master
Marc-André Lureau 11 months ago committed by Paolo Bonzini
parent 287698e50f
commit f793dde091
  1. 8
      blockdev.c
  2. 6
      hw/rtc/m41t80.c
  3. 9
      hw/virtio/virtio-balloon.c
  4. 9
      qapi/qmp-event.c
  5. 8
      qemu-img.c
  6. 22
      target/m68k/m68k-semi.c
  7. 23
      target/nios2/nios2-semi.c

@ -1258,7 +1258,7 @@ static void internal_snapshot_prepare(BlkActionState *common,
BlockDriverState *bs;
QEMUSnapshotInfo old_sn, *sn;
bool ret;
qemu_timeval tv;
int64_t rt;
BlockdevSnapshotInternal *internal;
InternalSnapshotState *state;
AioContext *aio_context;
@ -1328,9 +1328,9 @@ static void internal_snapshot_prepare(BlkActionState *common,
/* 3. take the snapshot */
sn = &state->sn;
pstrcpy(sn->name, sizeof(sn->name), name);
qemu_gettimeofday(&tv);
sn->date_sec = tv.tv_sec;
sn->date_nsec = tv.tv_usec * 1000;
rt = g_get_real_time();
sn->date_sec = rt / G_USEC_PER_SEC;
sn->date_nsec = (rt % G_USEC_PER_SEC) * 1000;
sn->vm_clock_nsec = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
if (replay_mode != REPLAY_MODE_NONE) {
sn->icount = replay_get_current_icount();

@ -47,7 +47,7 @@ static uint8_t m41t80_recv(I2CSlave *i2c)
{
M41t80State *s = M41T80(i2c);
struct tm now;
qemu_timeval tv;
int64_t rt;
if (s->addr < 0) {
s->addr = 0;
@ -57,8 +57,8 @@ static uint8_t m41t80_recv(I2CSlave *i2c)
}
switch (s->addr++) {
case 0:
qemu_gettimeofday(&tv);
return to_bcd(tv.tv_usec / 10000);
rt = g_get_real_time();
return to_bcd((rt % G_USEC_PER_SEC) / 10000);
case 1:
return to_bcd(now.tm_sec);
case 2:

@ -452,7 +452,6 @@ static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq)
VirtQueueElement *elem;
VirtIOBalloonStat stat;
size_t offset = 0;
qemu_timeval tv;
elem = virtqueue_pop(vq, sizeof(VirtQueueElement));
if (!elem) {
@ -484,13 +483,7 @@ static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq)
s->stats[tag] = val;
}
s->stats_vq_offset = offset;
if (qemu_gettimeofday(&tv) < 0) {
warn_report("%s: failed to get time of day", __func__);
goto out;
}
s->stats_last_update = tv.tv_sec;
s->stats_last_update = g_get_real_time() / G_USEC_PER_SEC;
out:
if (balloon_stats_enabled(s)) {

@ -20,15 +20,12 @@
static void timestamp_put(QDict *qdict)
{
int err;
QDict *ts;
qemu_timeval tv;
int64_t rt = g_get_real_time();
err = qemu_gettimeofday(&tv);
/* Put -1 to indicate failure of getting host time */
ts = qdict_from_jsonf_nofail("{ 'seconds': %lld, 'microseconds': %lld }",
err < 0 ? -1LL : (long long)tv.tv_sec,
err < 0 ? -1LL : (long long)tv.tv_usec);
(long long)rt / G_USEC_PER_SEC,
(long long)rt % G_USEC_PER_SEC);
qdict_put(qdict, "timestamp", ts);
}

@ -3305,11 +3305,11 @@ static int img_snapshot(int argc, char **argv)
char *filename, *snapshot_name = NULL;
int c, ret = 0, bdrv_oflags;
int action = 0;
qemu_timeval tv;
bool quiet = false;
Error *err = NULL;
bool image_opts = false;
bool force_share = false;
int64_t rt;
bdrv_oflags = BDRV_O_RDWR;
/* Parse commandline parameters */
@ -3406,9 +3406,9 @@ static int img_snapshot(int argc, char **argv)
memset(&sn, 0, sizeof(sn));
pstrcpy(sn.name, sizeof(sn.name), snapshot_name);
qemu_gettimeofday(&tv);
sn.date_sec = tv.tv_sec;
sn.date_nsec = tv.tv_usec * 1000;
rt = g_get_real_time();
sn.date_sec = rt / G_USEC_PER_SEC;
sn.date_nsec = (rt % G_USEC_PER_SEC) * 1000;
ret = bdrv_snapshot_create(bs, &sn);
if (ret) {

@ -378,19 +378,17 @@ void do_m68k_semihosting(CPUM68KState *env, int nr)
arg0, arg1);
return;
} else {
qemu_timeval tv;
struct gdb_timeval *p;
result = qemu_gettimeofday(&tv);
if (result == 0) {
if (!(p = lock_user(VERIFY_WRITE,
arg0, sizeof(struct gdb_timeval), 0))) {
/* FIXME - check error code? */
result = -1;
} else {
p->tv_sec = cpu_to_be32(tv.tv_sec);
p->tv_usec = cpu_to_be64(tv.tv_usec);
unlock_user(p, arg0, sizeof(struct gdb_timeval));
}
int64_t rt = g_get_real_time();
p = lock_user(VERIFY_WRITE, arg0, sizeof(struct gdb_timeval), 0);
if (!p) {
/* FIXME - check error code? */
result = -1;
} else {
result = 0;
p->tv_sec = cpu_to_be32(rt / G_USEC_PER_SEC);
p->tv_usec = cpu_to_be64(rt % G_USEC_PER_SEC);
unlock_user(p, arg0, sizeof(struct gdb_timeval));
}
}
break;

@ -400,20 +400,17 @@ void do_nios2_semihosting(CPUNios2State *env)
arg0, 0);
return;
} else {
qemu_timeval tv;
struct gdb_timeval *p;
result = qemu_gettimeofday(&tv);
if (result == 0) {
p = lock_user(VERIFY_WRITE, arg0, sizeof(struct gdb_timeval),
0);
if (!p) {
result = -1;
errno = EFAULT;
} else {
p->tv_sec = cpu_to_be32(tv.tv_sec);
p->tv_usec = cpu_to_be64(tv.tv_usec);
unlock_user(p, arg0, sizeof(struct gdb_timeval));
}
int64_t rt = g_get_real_time();
p = lock_user(VERIFY_WRITE, arg0, sizeof(struct gdb_timeval), 0);
if (!p) {
result = -1;
errno = EFAULT;
} else {
result = 0;
p->tv_sec = cpu_to_be32(rt / G_USEC_PER_SEC);
p->tv_usec = cpu_to_be64(rt % G_USEC_PER_SEC);
unlock_user(p, arg0, sizeof(struct gdb_timeval));
}
}
break;

Loading…
Cancel
Save