Index: qemu-working/hw/ptimer.c
===================================================================
--- qemu-working.orig/hw/ptimer.c	2012-04-20 15:09:09.317922659 +1000
+++ qemu-working/hw/ptimer.c	2012-04-20 15:30:42.108486207 +1000
@@ -180,6 +180,19 @@ void ptimer_set_freq(ptimer_state *s, ui
    count = limit.  */
 void ptimer_set_limit(ptimer_state *s, uint64_t limit, int reload)
 {
+    /*
+     * Artificially limit timeout rate to something
+     * achievable under QEMU.  Otherwise, QEMU spends all
+     * its time generating timer interrupts, and there
+     * is no forward progress.
+     * About ten microseconds is the fastest that really works
+     * on the current generation of host machines.
+     */
+
+    if (limit * s->period < 10000 && s->period) {
+        limit = 10000 / s->period;
+    }
+
     s->limit = limit;
     if (reload)
         s->delta = limit;
