diff options
-rw-r--r-- | hw/ptimer.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/hw/ptimer.c b/hw/ptimer.c index de7d664..bc0b3f8 100644 --- a/hw/ptimer.c +++ b/hw/ptimer.c @@ -180,6 +180,19 @@ void ptimer_set_freq(ptimer_state *s, uint32_t freq) 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; |