summaryrefslogtreecommitdiff
path: root/emulators/qemu/files/patch-dynticks
diff options
context:
space:
mode:
Diffstat (limited to 'emulators/qemu/files/patch-dynticks')
-rw-r--r--emulators/qemu/files/patch-dynticks99
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)
+ {