[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC 2/2] sem-posix: use monotonic clock instead
From: |
Paolo Bonzini |
Subject: |
Re: [RFC 2/2] sem-posix: use monotonic clock instead |
Date: |
Mon, 21 Feb 2022 12:42:26 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 |
On 2/21/22 10:56, Longpeng(Mike) via wrote:
+ long now_nsec;
+#ifdef CONFIG_PTHREAD_CONDATTR_SETCLOCK
+ struct timespec now;
+ clock_gettime(CLOCK_MONOTONIC, &now);
+ now_sec = now.tv_sec;
+ now_nsec = now.tv_nsec;
+#else
struct timeval tv;
gettimeofday(&tv, NULL);
- ts->tv_nsec = tv.tv_usec * 1000 + (ms % 1000) * 1000000;
- ts->tv_sec = tv.tv_sec + ms / 1000;
+ now_sec = tv.tv_sec;
+ now_nsec = tv.tv_usec * 1000;
+#endif
+
Perhaps this might minimize the amount of conditional code, too:
diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
index 903fa33965..4743d7b714 100644
--- a/util/qemu-thread-posix.c
+++ b/util/qemu-thread-posix.c
@@ -40,10 +40,14 @@ static void error_exit(int err, const char *msg)
static void compute_abs_deadline(struct timespec *ts, int ms)
{
- struct timeval tv;
- gettimeofday(&tv, NULL);
- ts->tv_nsec = tv.tv_usec * 1000 + (ms % 1000) * 1000000;
- ts->tv_sec = tv.tv_sec + ms / 1000;
+#ifdef CONFIG_PTHREAD_CONDATTR_SETCLOCK
+ clock_gettime(CLOCK_MONOTONIC, ts);
+#else
+ clock_gettime(CLOCK_REALTIME, ts);
+#endif
+
+ ts->tv_nsec += (ms % 1000) * 1000000;
+ ts->tv_sec += ms / 1000;
if (ts->tv_nsec >= 1000000000) {
ts->tv_sec++;
ts->tv_nsec -= 1000000000;
Finally, the conditional variables initialization qemu_cond_init must
also use pthread_condattr_setclock.
Paolo