diff options
Diffstat (limited to 'emulators/qemu/files/patch-dynticks')
-rw-r--r-- | emulators/qemu/files/patch-dynticks | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/emulators/qemu/files/patch-dynticks b/emulators/qemu/files/patch-dynticks new file mode 100644 index 000000000000..05633653d468 --- /dev/null +++ b/emulators/qemu/files/patch-dynticks @@ -0,0 +1,99 @@ +Index: qemu/configure +@@ -1025,11 +1025,26 @@ + rt=yes + fi + ++########################################## ++# posix timer probe ++cat > $TMPC <<EOF ++#include <time.h> ++int main(void) { timer_create(CLOCK_REALTIME, (struct sigevent *)NULL, (timer_t *)NULL); return 0; } ++EOF ++posixtimer=no ++if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then ++ posixtimer=yes ++elif $cc $ARCH_CFLAGS -o $TMPE $TMPC -lrt 2> /dev/null ; then ++ posixtimer=yes ++ rt=yes ++fi ++ + if test "$rt" = "yes" ; then + # Hack, we should have a general purpose LIBS for this sort of thing + AIOLIBS="$AIOLIBS -lrt" + fi + ++ + if test "$mingw32" = "yes" ; then + if test -z "$prefix" ; then + prefix="c:\\\\Program Files\\\\Qemu" +@@ -1403,6 +1418,9 @@ + echo "#define HAVE_FDT 1" >> $config_h + echo "FDT_LIBS=-lfdt" >> $config_mak + fi ++if test "$posixtimer" = "yes" ; then ++ echo "#define HAVE_POSIX_TIMER 1" >> $config_h ++fi + + # XXX: suppress that + if [ "$bsd" = "yes" ] ; then +Index: qemu/vl.c +@@ -918,12 +918,16 @@ + static int unix_start_timer(struct qemu_alarm_timer *t); + static void unix_stop_timer(struct qemu_alarm_timer *t); + +-#ifdef __linux__ ++#ifdef HAVE_POSIX_TIMER + + static int dynticks_start_timer(struct qemu_alarm_timer *t); + static void dynticks_stop_timer(struct qemu_alarm_timer *t); + static void dynticks_rearm_timer(struct qemu_alarm_timer *t); + ++#endif ++ ++#ifdef __linux__ ++ + static int hpet_start_timer(struct qemu_alarm_timer *t); + static void hpet_stop_timer(struct qemu_alarm_timer *t); + +@@ -1001,9 +1005,11 @@ + + static struct qemu_alarm_timer alarm_timers[] = { + #ifndef _WIN32 +-#ifdef __linux__ ++#ifdef HAVE_POSIX_TIMER + {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer, + dynticks_stop_timer, dynticks_rearm_timer, NULL}, ++#endif ++#ifdef __linux__ + /* HPET - if available - is preferred */ + {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL}, + /* ...otherwise try RTC */ +@@ -1361,7 +1367,7 @@ + return delta; + } + +-#if defined(__linux__) || defined(_WIN32) ++#if defined(HAVE_POSIX_TIMER) || defined(_WIN32) + static uint64_t qemu_next_deadline_dyntick(void) + { + int64_t delta; +@@ -1506,6 +1512,10 @@ + close(rtc_fd); + } + ++#endif /* defined(__linux__) */ ++ ++#ifdef HAVE_POSIX_TIMER ++ + static int dynticks_start_timer(struct qemu_alarm_timer *t) + { + struct sigevent ev; +@@ -1577,7 +1587,7 @@ + } + } + +-#endif /* defined(__linux__) */ ++#endif /* defined(HAVE_POSIX_TIMER) */ + + static int unix_start_timer(struct qemu_alarm_timer *t) + { |