static void qemu_kvm_wait_io_event(CPUState *env) { while (!cpu_has_work(env)) qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000); qemu_kvm_eat_signal(env, 0); qemu_wait_io_event_common(env); }
int tcg_has_work(void) { CPUState *env; for (env = first_cpu; env != NULL; env = env->next_cpu) if (cpu_has_work(env)) return 1; return 0; }
static void xtensa_ccompare_cb(void *opaque) { XtensaCPU *cpu = opaque; CPUXtensaState *env = &cpu->env; if (env->halted) { env->halt_clock = qemu_get_clock_ns(vm_clock); xtensa_advance_ccount(env, env->wake_ccount - env->sregs[CCOUNT]); if (!cpu_has_work(CPU(cpu))) { env->sregs[CCOUNT] = env->wake_ccount + 1; xtensa_rearm_ccompare_timer(env); } } }
bool qemu_cpu_has_work(CPUState *cpu) { return cpu_has_work(cpu); }