On Wed, Apr 03, 2013 at 10:18:51AM +0200, Paolo Bonzini wrote: > Il 03/04/2013 00:52, Peter Maydell ha scritto: > > On 2 April 2013 17:45, Paolo Bonzini <pbonz...@redhat.com> wrote: > >> Il 02/04/2013 17:42, Brad Smith ha scritto: > >>> Replace the hardcoded list of OS's utilizing clock_gettime() for monotonic > >>> time with a configure test. This is to fix the use of monotonic time on > >>> OpenBSD but allows for other POSIX compliant OS's such as NetBSD to also > >>> utilize clock_gettime(). > >> > >> I thought the list of OSes was supposed to filter out those that somehow > >> had a broken CLOCK_MONOTONIC. > > > > Judging from wading through git history, it's mostly just > > historic accretion from an initial #ifdef __linux__ which was > > put in by Fabrice way back when configure was barely doing > > compile-this-code checks at all. > > > > Google does suggest that some OSes do provide a CLOCK_MONOTONIC > > but clock_gettime(CLOCK_MONOTONIC) always fails, eg Centos 3. > > It would already fail, and no one reported it. > > CentOS 3 has a 2.4 kernel. I doubt anyone is using it with a recent QEMU. > > Paolo > > >> Otherwise, you might as well use "#ifdef CLOCK_MONOTONIC" and skip the > >> configure test completely. > > > > Tempting. > > > > -- PMM
Then how about the following? This looks like it should be good for Linux, *BSD's, Solaris. diff --git a/include/qemu/timer.h b/include/qemu/timer.h index 1766b2d..c363190 100644 --- a/include/qemu/timer.h +++ b/include/qemu/timer.h @@ -117,8 +117,7 @@ extern int use_rt_clock; static inline int64_t get_clock(void) { -#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \ - || defined(__DragonFly__) || defined(__FreeBSD_kernel__) +#ifdef CLOCK_MONOTONIC if (use_rt_clock) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); diff --git a/util/qemu-timer-common.c b/util/qemu-timer-common.c index 16f5e75..95e0847 100644 --- a/util/qemu-timer-common.c +++ b/util/qemu-timer-common.c @@ -49,9 +49,7 @@ int use_rt_clock; static void __attribute__((constructor)) init_get_clock(void) { use_rt_clock = 0; -#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \ - || defined(__DragonFly__) || defined(__FreeBSD_kernel__) \ - || defined(__OpenBSD__) +#ifdef CLOCK_MONOTONIC { struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) { -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.