void pause_all_vcpus(void) { CPUArchState *penv = first_cpu; qemu_clock_enable(vm_clock, false); while (penv) { penv->stop = 1; qemu_cpu_kick(penv); penv = penv->next_cpu; } if (!qemu_thread_is_self(&io_thread)) { cpu_stop_current(); if (!kvm_enabled()) { while (penv) { penv->stop = 0; penv->stopped = 1; penv = penv->next_cpu; } return; } } while (!all_vcpus_paused()) { qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); penv = first_cpu; while (penv) { qemu_cpu_kick(penv); penv = penv->next_cpu; } } }
bool cpu_exec_all (void) { static int i = 0; if (next_cpu == NULL) { next_cpu = first_cpu; i = 0; } for (; next_cpu != NULL && !exit_request; next_cpu = next_cpu->next_cpu, i++) { CPUState *env = next_cpu; rr_run = env->kvm_run; cpu_number = i; qemu_clock_enable(vm_clock, (env->singlestep_enabled & SSTEP_NOTIMER) == 0); if (qemu_alarm_pending()) break; if (cpu_can_run(env)) { if (qemu_cpu_exec(env) == EXCP_DEBUG) { break; } } else if (env->stop) { break; } } exit_request = 0; return any_cpu_has_work(); }
static void tcg_exec_all(void) { int r; /* Account partial waits to the vm_clock. */ qemu_clock_warp(vm_clock); if (next_cpu == NULL) { next_cpu = first_cpu; } for (; next_cpu != NULL && !exit_request; next_cpu = next_cpu->next_cpu) { CPUArchState *env = next_cpu; CPUState *cpu = ENV_GET_CPU(env); qemu_clock_enable(vm_clock, (env->singlestep_enabled & SSTEP_NOTIMER) == 0); if (cpu_can_run(cpu)) { r = tcg_cpu_exec(env); if (r == EXCP_DEBUG) { cpu_handle_guest_debug(env); break; } } else if (cpu->stop || cpu->stopped) { break; } } exit_request = 0; }
bool tcg_cpu_exec(void) { int ret = 0; if (next_cpu == NULL) next_cpu = first_cpu; for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) { CPUState *env = cur_cpu = next_cpu; qemu_clock_enable(vm_clock, (cur_cpu->singlestep_enabled & SSTEP_NOTIMER) == 0); if (qemu_alarm_pending()) break; if (cpu_can_run(env)) ret = qemu_cpu_exec(env); else if (env->stop) break; if (ret == EXCP_DEBUG) { gdb_set_stop_cpu(env); debug_requested = EXCP_DEBUG; break; } } return tcg_has_work(); }
void pause_all_vcpus(void) { CPUState *cpu = first_cpu; qemu_clock_enable(QEMU_CLOCK_VIRTUAL, false); while (cpu) { cpu->stop = true; qemu_cpu_kick(cpu); cpu = cpu->next_cpu; } if (qemu_in_vcpu_thread()) { cpu_stop_current(); if (!kvm_enabled()) { cpu = first_cpu; while (cpu) { cpu->stop = false; cpu->stopped = true; cpu = cpu->next_cpu; } return; } } while (!all_vcpus_paused()) { qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); cpu = first_cpu; while (cpu) { qemu_cpu_kick(cpu); cpu = cpu->next_cpu; } } }
static void tcg_exec_all(void) { int r; /* Account partial waits to QEMU_CLOCK_VIRTUAL. */ qemu_clock_warp(QEMU_CLOCK_VIRTUAL); if (next_cpu == NULL) { next_cpu = first_cpu; } for (; next_cpu != NULL && !exit_request; next_cpu = next_cpu->next_cpu) { CPUState *cpu = next_cpu; CPUArchState *env = cpu->env_ptr; qemu_clock_enable(QEMU_CLOCK_VIRTUAL, (cpu->singlestep_enabled & SSTEP_NOTIMER) == 0); if (cpu_can_run(cpu)) { r = tcg_cpu_exec(env); if (r == EXCP_DEBUG) { cpu_handle_guest_debug(cpu); break; } } else if (cpu->stop || cpu->stopped) { break; } } exit_request = 0; }
bool cpu_exec_all(void) { int r; /* Account partial waits to the vm_clock. */ qemu_clock_warp(vm_clock); if (next_cpu == NULL) { next_cpu = first_cpu; } for (; next_cpu != NULL && !exit_request; next_cpu = next_cpu->next_cpu) { CPUState *env = next_cpu; qemu_clock_enable(vm_clock, (env->singlestep_enabled & SSTEP_NOTIMER) == 0); if (cpu_can_run(env)) { if (kvm_enabled()) { r = kvm_cpu_exec(env); qemu_kvm_eat_signals(env); } else { r = tcg_cpu_exec(env); } if (r == EXCP_DEBUG) { cpu_handle_guest_debug(env); break; } } else if (env->stop || env->stopped) { break; } } exit_request = 0; return !all_cpu_threads_idle(); }
void pause_all_vcpus(void) { CPUArchState *penv = first_cpu; qemu_clock_enable(vm_clock, false); while (penv) { CPUState *pcpu = ENV_GET_CPU(penv); pcpu->stop = true; qemu_cpu_kick(pcpu); penv = penv->next_cpu; } if (qemu_in_vcpu_thread()) { cpu_stop_current(); if (!kvm_enabled()) { while (penv) { CPUState *pcpu = ENV_GET_CPU(penv); pcpu->stop = 0; pcpu->stopped = true; penv = penv->next_cpu; } return; } } while (!all_vcpus_paused()) { qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); penv = first_cpu; while (penv) { qemu_cpu_kick(ENV_GET_CPU(penv)); penv = penv->next_cpu; } } }
int qemu_init_main_loop(void) { init_clocks(); init_timer_alarm(1); qemu_clock_enable(vm_clock, false); return main_loop_init(); }
void resume_all_vcpus(void) { CPUState *cpu = first_cpu; qemu_clock_enable(QEMU_CLOCK_VIRTUAL, true); while (cpu) { cpu_resume(cpu); cpu = cpu->next_cpu; } }
void resume_all_vcpus(void) { CPUArchState *penv = first_cpu; qemu_clock_enable(vm_clock, true); while (penv) { penv->stop = 0; penv->stopped = 0; qemu_cpu_kick(penv); penv = penv->next_cpu; } }
void resume_all_vcpus(void) { CPUArchState *penv = first_cpu; qemu_clock_enable(vm_clock, true); while (penv) { CPUState *pcpu = ENV_GET_CPU(penv); pcpu->stop = false; pcpu->stopped = false; qemu_cpu_kick(pcpu); penv = penv->next_cpu; } }
bool cpu_exec_all(void) { int r; /* Account partial waits to the vm_clock. */ qemu_clock_warp(vm_clock); if (next_cpu == NULL) { next_cpu = first_cpu; } for (; next_cpu != NULL && !exit_request; next_cpu = next_cpu->next_cpu) { CPUState *env = next_cpu; qemu_clock_enable(vm_clock, (env->singlestep_enabled & SSTEP_NOTIMER) == 0); #ifndef CONFIG_IOTHREAD if (qemu_alarm_pending()) { break; } #endif if (cpu_can_run(env)) { if (kvm_enabled()) { r = kvm_cpu_exec(env); qemu_kvm_eat_signals(env); } else { r = tcg_cpu_exec(env); } if (r == EXCP_TRIPLE) { cpu_dump_state(env, stderr, fprintf, 0); fprintf(stderr, "Triple fault. Halting for inspection via" " QEMU monitor.\n"); if (gdbserver_running()) r = EXCP_DEBUG; else { vm_stop(0); break; } } if (r == EXCP_DEBUG) { cpu_handle_guest_debug(env); break; } } else if (env->stop || env->stopped) { break; } } exit_request = 0; return !all_cpu_threads_idle(); }
void resume_all_vcpus(void) { CPUArchState *penv = first_cpu; qemu_clock_enable(vm_clock, true); while (penv) { penv->stop = 0; penv->stopped = 0; #ifdef CONFIG_S2E_DEBUG s2e_debug_print("MAIN: resume_all_vcpus kicking\n"); #endif qemu_cpu_kick(penv); penv = penv->next_cpu; } }
void pause_all_vcpus(void) { CPUState *penv = first_cpu; qemu_clock_enable(vm_clock, false); while (penv) { penv->stop = 1; qemu_cpu_kick(penv); penv = (CPUState *)penv->next_cpu; } while (!all_vcpus_paused()) { qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); penv = first_cpu; while (penv) { qemu_cpu_kick(penv); penv = (CPUState *)penv->next_cpu; } } }
bool cpu_exec_all(void) { if (next_cpu == NULL) next_cpu = first_cpu; for (; next_cpu != NULL && !exit_request; next_cpu = next_cpu->next_cpu) { CPUState *env = next_cpu; qemu_clock_enable(vm_clock, (env->singlestep_enabled & SSTEP_NOTIMER) == 0); if (qemu_alarm_pending()) break; if (cpu_can_run(env)) { if (qemu_cpu_exec(env) == EXCP_DEBUG) { break; } } else if (env->stop) { #ifdef MARSS_QEMU continue; /* Let other CPUS execute */ #else break; #endif } #ifdef MARSS_QEMU if (in_simulation) /* No need to run for other cpus */ break; #endif } #ifdef MARSS_QEMU if (!any_cpu_has_work()) { /* All CPUs are paused, call ptl_simpoint reached * to check if we need to switch to simulation or not */ ptl_simpoint_reached(0); } #endif exit_request = 0; return any_cpu_has_work(); }
void pause_all_vcpus(void) { CPUArchState *penv = first_cpu; qemu_clock_enable(vm_clock, false); while (penv) { #ifdef CONFIG_S2E_DEBUG s2e_debug_print("MAIN: pause_all_vcpus kiking cpus\n"); #endif penv->stop = 1; qemu_cpu_kick(penv); penv = penv->next_cpu; } if (!qemu_thread_is_self(&io_thread)) { cpu_stop_current(); if (!kvm_enabled()) { while (penv) { penv->stop = 0; penv->stopped = 1; penv = penv->next_cpu; } return; } } while (!all_vcpus_paused()) { #ifdef CONFIG_S2E_DEBUG s2e_debug_print("MAIN: pause_all_vcpus waiting for qemu_pause_cond\n"); #endif qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); penv = first_cpu; while (penv) { qemu_cpu_kick(penv); penv = penv->next_cpu; } } }
void pause_all_vcpus(void) { CPUState *penv = first_cpu; qemu_clock_enable(vm_clock, false); while (penv) { penv->stop = 1; qemu_cpu_kick(penv); penv = (CPUState *)penv->next_cpu; } while (!all_vcpus_paused()) { qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); penv = first_cpu; while (penv) { qemu_cpu_kick(penv); penv = (CPUState *)penv->next_cpu; } } show_all_ifetch_counters(); tcg_plugin_cpus_stopped(); }
static void __attribute__((constructor)) init_main_loop(void) { init_clocks(); init_timer_alarm(); qemu_clock_enable(vm_clock, false); }