Loading cpu-defs.h +0 −1 Original line number Diff line number Diff line Loading @@ -205,7 +205,6 @@ typedef struct CPUWatchpoint { /* user data */ \ void *opaque; \ \ uint32_t stop; /* Stop request */ \ uint32_t stopped; /* Artificially stopped */ \ struct QemuCond *halt_cond; \ struct qemu_work_item *queued_work_first, *queued_work_last; \ Loading cpus.c +18 −9 Original line number Diff line number Diff line Loading @@ -64,7 +64,9 @@ static CPUArchState *next_cpu; static bool cpu_thread_is_idle(CPUArchState *env) { if (env->stop || env->queued_work_first) { CPUState *cpu = ENV_GET_CPU(env); if (cpu->stop || env->queued_work_first) { return false; } if (env->stopped || !runstate_is_running()) { Loading Loading @@ -448,7 +450,9 @@ static void do_vm_stop(RunState state) static int cpu_can_run(CPUArchState *env) { if (env->stop) { CPUState *cpu = ENV_GET_CPU(env); if (cpu->stop) { return 0; } if (env->stopped || !runstate_is_running()) { Loading Loading @@ -687,8 +691,8 @@ static void qemu_wait_io_event_common(CPUArchState *env) { CPUState *cpu = ENV_GET_CPU(env); if (env->stop) { env->stop = 0; if (cpu->stop) { cpu->stop = false; env->stopped = 1; qemu_cond_signal(&qemu_pause_cond); } Loading Loading @@ -941,7 +945,8 @@ void pause_all_vcpus(void) qemu_clock_enable(vm_clock, false); while (penv) { penv->stop = 1; CPUState *pcpu = ENV_GET_CPU(penv); pcpu->stop = true; qemu_cpu_kick(penv); penv = penv->next_cpu; } Loading @@ -950,7 +955,8 @@ void pause_all_vcpus(void) cpu_stop_current(); if (!kvm_enabled()) { while (penv) { penv->stop = 0; CPUState *pcpu = ENV_GET_CPU(penv); pcpu->stop = 0; penv->stopped = 1; penv = penv->next_cpu; } Loading @@ -974,7 +980,8 @@ void resume_all_vcpus(void) qemu_clock_enable(vm_clock, true); while (penv) { penv->stop = 0; CPUState *pcpu = ENV_GET_CPU(penv); pcpu->stop = false; penv->stopped = 0; qemu_cpu_kick(penv); penv = penv->next_cpu; Loading Loading @@ -1054,7 +1061,8 @@ void qemu_init_vcpu(void *_env) void cpu_stop_current(void) { if (cpu_single_env) { cpu_single_env->stop = 0; CPUState *cpu_single_cpu = ENV_GET_CPU(cpu_single_env); cpu_single_cpu->stop = false; cpu_single_env->stopped = 1; cpu_exit(cpu_single_env); qemu_cond_signal(&qemu_pause_cond); Loading Loading @@ -1136,6 +1144,7 @@ static void tcg_exec_all(void) } 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); Loading @@ -1146,7 +1155,7 @@ static void tcg_exec_all(void) cpu_handle_guest_debug(env); break; } } else if (env->stop || env->stopped) { } else if (cpu->stop || env->stopped) { break; } } Loading include/qemu/cpu.h +2 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ typedef struct CPUClass { /** * CPUState: * @created: Indicates whether the CPU thread has been successfully created. * @stop: Indicates a pending stop request. * * State of one CPU core or thread. */ Loading @@ -69,6 +70,7 @@ struct CPUState { #endif bool thread_kicked; bool created; bool stop; /* TODO Move common fields from CPUArchState here. */ }; Loading Loading
cpu-defs.h +0 −1 Original line number Diff line number Diff line Loading @@ -205,7 +205,6 @@ typedef struct CPUWatchpoint { /* user data */ \ void *opaque; \ \ uint32_t stop; /* Stop request */ \ uint32_t stopped; /* Artificially stopped */ \ struct QemuCond *halt_cond; \ struct qemu_work_item *queued_work_first, *queued_work_last; \ Loading
cpus.c +18 −9 Original line number Diff line number Diff line Loading @@ -64,7 +64,9 @@ static CPUArchState *next_cpu; static bool cpu_thread_is_idle(CPUArchState *env) { if (env->stop || env->queued_work_first) { CPUState *cpu = ENV_GET_CPU(env); if (cpu->stop || env->queued_work_first) { return false; } if (env->stopped || !runstate_is_running()) { Loading Loading @@ -448,7 +450,9 @@ static void do_vm_stop(RunState state) static int cpu_can_run(CPUArchState *env) { if (env->stop) { CPUState *cpu = ENV_GET_CPU(env); if (cpu->stop) { return 0; } if (env->stopped || !runstate_is_running()) { Loading Loading @@ -687,8 +691,8 @@ static void qemu_wait_io_event_common(CPUArchState *env) { CPUState *cpu = ENV_GET_CPU(env); if (env->stop) { env->stop = 0; if (cpu->stop) { cpu->stop = false; env->stopped = 1; qemu_cond_signal(&qemu_pause_cond); } Loading Loading @@ -941,7 +945,8 @@ void pause_all_vcpus(void) qemu_clock_enable(vm_clock, false); while (penv) { penv->stop = 1; CPUState *pcpu = ENV_GET_CPU(penv); pcpu->stop = true; qemu_cpu_kick(penv); penv = penv->next_cpu; } Loading @@ -950,7 +955,8 @@ void pause_all_vcpus(void) cpu_stop_current(); if (!kvm_enabled()) { while (penv) { penv->stop = 0; CPUState *pcpu = ENV_GET_CPU(penv); pcpu->stop = 0; penv->stopped = 1; penv = penv->next_cpu; } Loading @@ -974,7 +980,8 @@ void resume_all_vcpus(void) qemu_clock_enable(vm_clock, true); while (penv) { penv->stop = 0; CPUState *pcpu = ENV_GET_CPU(penv); pcpu->stop = false; penv->stopped = 0; qemu_cpu_kick(penv); penv = penv->next_cpu; Loading Loading @@ -1054,7 +1061,8 @@ void qemu_init_vcpu(void *_env) void cpu_stop_current(void) { if (cpu_single_env) { cpu_single_env->stop = 0; CPUState *cpu_single_cpu = ENV_GET_CPU(cpu_single_env); cpu_single_cpu->stop = false; cpu_single_env->stopped = 1; cpu_exit(cpu_single_env); qemu_cond_signal(&qemu_pause_cond); Loading Loading @@ -1136,6 +1144,7 @@ static void tcg_exec_all(void) } 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); Loading @@ -1146,7 +1155,7 @@ static void tcg_exec_all(void) cpu_handle_guest_debug(env); break; } } else if (env->stop || env->stopped) { } else if (cpu->stop || env->stopped) { break; } } Loading
include/qemu/cpu.h +2 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ typedef struct CPUClass { /** * CPUState: * @created: Indicates whether the CPU thread has been successfully created. * @stop: Indicates a pending stop request. * * State of one CPU core or thread. */ Loading @@ -69,6 +70,7 @@ struct CPUState { #endif bool thread_kicked; bool created; bool stop; /* TODO Move common fields from CPUArchState here. */ }; Loading