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>
This commit is contained in:
parent
287698e50f
commit
f793dde091
@ -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…
Reference in New Issue
Block a user