Index: common/kernel.c @@ -1079,6 +1079,10 @@ long kqemu_exec(struct kqemu_state *s) uint16_t saved_ds, saved_es; unsigned long fs_base, gs_base; #endif +#if defined(__FreeBSD__) + extern int ticks; + int tstart = ticks; +#endif #ifdef PROFILE s->nb_profile_ts = 0; @@ -1252,7 +1256,11 @@ long kqemu_exec(struct kqemu_state *s) /* if interrupting user code, we schedule to give time to the other processes. We can be interrupted by a signal a that case. */ - if (kqemu_schedule()) { + if (kqemu_schedule() +#if defined(__FreeBSD__) + || ticks - tstart > 1 +#endif + ) { restore_cpu_state_from_regs(s, r); ret = KQEMU_RET_INTR; break;