Skip to content

Commit f793dde

Browse files
elmarcobonzini
authored andcommitted
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 <[email protected]> Reviewed-by: Laurent Vivier <[email protected]> Message-Id: <[email protected]> Signed-off-by: Paolo Bonzini <[email protected]>
1 parent 287698e commit f793dde

File tree

7 files changed

+35
-50
lines changed

7 files changed

+35
-50
lines changed

blockdev.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,7 +1258,7 @@ static void internal_snapshot_prepare(BlkActionState *common,
12581258
BlockDriverState *bs;
12591259
QEMUSnapshotInfo old_sn, *sn;
12601260
bool ret;
1261-
qemu_timeval tv;
1261+
int64_t rt;
12621262
BlockdevSnapshotInternal *internal;
12631263
InternalSnapshotState *state;
12641264
AioContext *aio_context;
@@ -1328,9 +1328,9 @@ static void internal_snapshot_prepare(BlkActionState *common,
13281328
/* 3. take the snapshot */
13291329
sn = &state->sn;
13301330
pstrcpy(sn->name, sizeof(sn->name), name);
1331-
qemu_gettimeofday(&tv);
1332-
sn->date_sec = tv.tv_sec;
1333-
sn->date_nsec = tv.tv_usec * 1000;
1331+
rt = g_get_real_time();
1332+
sn->date_sec = rt / G_USEC_PER_SEC;
1333+
sn->date_nsec = (rt % G_USEC_PER_SEC) * 1000;
13341334
sn->vm_clock_nsec = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
13351335
if (replay_mode != REPLAY_MODE_NONE) {
13361336
sn->icount = replay_get_current_icount();

hw/rtc/m41t80.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ static uint8_t m41t80_recv(I2CSlave *i2c)
4747
{
4848
M41t80State *s = M41T80(i2c);
4949
struct tm now;
50-
qemu_timeval tv;
50+
int64_t rt;
5151

5252
if (s->addr < 0) {
5353
s->addr = 0;
@@ -57,8 +57,8 @@ static uint8_t m41t80_recv(I2CSlave *i2c)
5757
}
5858
switch (s->addr++) {
5959
case 0:
60-
qemu_gettimeofday(&tv);
61-
return to_bcd(tv.tv_usec / 10000);
60+
rt = g_get_real_time();
61+
return to_bcd((rt % G_USEC_PER_SEC) / 10000);
6262
case 1:
6363
return to_bcd(now.tm_sec);
6464
case 2:

hw/virtio/virtio-balloon.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,6 @@ static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq)
452452
VirtQueueElement *elem;
453453
VirtIOBalloonStat stat;
454454
size_t offset = 0;
455-
qemu_timeval tv;
456455

457456
elem = virtqueue_pop(vq, sizeof(VirtQueueElement));
458457
if (!elem) {
@@ -484,13 +483,7 @@ static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq)
484483
s->stats[tag] = val;
485484
}
486485
s->stats_vq_offset = offset;
487-
488-
if (qemu_gettimeofday(&tv) < 0) {
489-
warn_report("%s: failed to get time of day", __func__);
490-
goto out;
491-
}
492-
493-
s->stats_last_update = tv.tv_sec;
486+
s->stats_last_update = g_get_real_time() / G_USEC_PER_SEC;
494487

495488
out:
496489
if (balloon_stats_enabled(s)) {

qapi/qmp-event.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,12 @@
2020

2121
static void timestamp_put(QDict *qdict)
2222
{
23-
int err;
2423
QDict *ts;
25-
qemu_timeval tv;
24+
int64_t rt = g_get_real_time();
2625

27-
err = qemu_gettimeofday(&tv);
28-
/* Put -1 to indicate failure of getting host time */
2926
ts = qdict_from_jsonf_nofail("{ 'seconds': %lld, 'microseconds': %lld }",
30-
err < 0 ? -1LL : (long long)tv.tv_sec,
31-
err < 0 ? -1LL : (long long)tv.tv_usec);
27+
(long long)rt / G_USEC_PER_SEC,
28+
(long long)rt % G_USEC_PER_SEC);
3229
qdict_put(qdict, "timestamp", ts);
3330
}
3431

qemu-img.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3305,11 +3305,11 @@ static int img_snapshot(int argc, char **argv)
33053305
char *filename, *snapshot_name = NULL;
33063306
int c, ret = 0, bdrv_oflags;
33073307
int action = 0;
3308-
qemu_timeval tv;
33093308
bool quiet = false;
33103309
Error *err = NULL;
33113310
bool image_opts = false;
33123311
bool force_share = false;
3312+
int64_t rt;
33133313

33143314
bdrv_oflags = BDRV_O_RDWR;
33153315
/* Parse commandline parameters */
@@ -3406,9 +3406,9 @@ static int img_snapshot(int argc, char **argv)
34063406
memset(&sn, 0, sizeof(sn));
34073407
pstrcpy(sn.name, sizeof(sn.name), snapshot_name);
34083408

3409-
qemu_gettimeofday(&tv);
3410-
sn.date_sec = tv.tv_sec;
3411-
sn.date_nsec = tv.tv_usec * 1000;
3409+
rt = g_get_real_time();
3410+
sn.date_sec = rt / G_USEC_PER_SEC;
3411+
sn.date_nsec = (rt % G_USEC_PER_SEC) * 1000;
34123412

34133413
ret = bdrv_snapshot_create(bs, &sn);
34143414
if (ret) {

target/m68k/m68k-semi.c

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -378,19 +378,17 @@ void do_m68k_semihosting(CPUM68KState *env, int nr)
378378
arg0, arg1);
379379
return;
380380
} else {
381-
qemu_timeval tv;
382381
struct gdb_timeval *p;
383-
result = qemu_gettimeofday(&tv);
384-
if (result == 0) {
385-
if (!(p = lock_user(VERIFY_WRITE,
386-
arg0, sizeof(struct gdb_timeval), 0))) {
387-
/* FIXME - check error code? */
388-
result = -1;
389-
} else {
390-
p->tv_sec = cpu_to_be32(tv.tv_sec);
391-
p->tv_usec = cpu_to_be64(tv.tv_usec);
392-
unlock_user(p, arg0, sizeof(struct gdb_timeval));
393-
}
382+
int64_t rt = g_get_real_time();
383+
p = lock_user(VERIFY_WRITE, arg0, sizeof(struct gdb_timeval), 0);
384+
if (!p) {
385+
/* FIXME - check error code? */
386+
result = -1;
387+
} else {
388+
result = 0;
389+
p->tv_sec = cpu_to_be32(rt / G_USEC_PER_SEC);
390+
p->tv_usec = cpu_to_be64(rt % G_USEC_PER_SEC);
391+
unlock_user(p, arg0, sizeof(struct gdb_timeval));
394392
}
395393
}
396394
break;

target/nios2/nios2-semi.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -400,20 +400,17 @@ void do_nios2_semihosting(CPUNios2State *env)
400400
arg0, 0);
401401
return;
402402
} else {
403-
qemu_timeval tv;
404403
struct gdb_timeval *p;
405-
result = qemu_gettimeofday(&tv);
406-
if (result == 0) {
407-
p = lock_user(VERIFY_WRITE, arg0, sizeof(struct gdb_timeval),
408-
0);
409-
if (!p) {
410-
result = -1;
411-
errno = EFAULT;
412-
} else {
413-
p->tv_sec = cpu_to_be32(tv.tv_sec);
414-
p->tv_usec = cpu_to_be64(tv.tv_usec);
415-
unlock_user(p, arg0, sizeof(struct gdb_timeval));
416-
}
404+
int64_t rt = g_get_real_time();
405+
p = lock_user(VERIFY_WRITE, arg0, sizeof(struct gdb_timeval), 0);
406+
if (!p) {
407+
result = -1;
408+
errno = EFAULT;
409+
} else {
410+
result = 0;
411+
p->tv_sec = cpu_to_be32(rt / G_USEC_PER_SEC);
412+
p->tv_usec = cpu_to_be64(rt % G_USEC_PER_SEC);
413+
unlock_user(p, arg0, sizeof(struct gdb_timeval));
417414
}
418415
}
419416
break;

0 commit comments

Comments
 (0)