cpu: Move stopped field to CPUState
Change its type to bool. Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
b6444a42c0
commit
f324e7667a
@ -205,7 +205,6 @@ typedef struct CPUWatchpoint {
|
||||
/* user data */ \
|
||||
void *opaque; \
|
||||
\
|
||||
uint32_t stopped; /* Artificially stopped */ \
|
||||
struct QemuCond *halt_cond; \
|
||||
struct qemu_work_item *queued_work_first, *queued_work_last; \
|
||||
const char *cpu_model_str; \
|
||||
|
30
cpus.c
30
cpus.c
@ -69,7 +69,7 @@ static bool cpu_thread_is_idle(CPUArchState *env)
|
||||
if (cpu->stop || env->queued_work_first) {
|
||||
return false;
|
||||
}
|
||||
if (env->stopped || !runstate_is_running()) {
|
||||
if (cpu->stopped || !runstate_is_running()) {
|
||||
return true;
|
||||
}
|
||||
if (!env->halted || qemu_cpu_has_work(env) ||
|
||||
@ -432,7 +432,9 @@ void cpu_synchronize_all_post_init(void)
|
||||
|
||||
int cpu_is_stopped(CPUArchState *env)
|
||||
{
|
||||
return !runstate_is_running() || env->stopped;
|
||||
CPUState *cpu = ENV_GET_CPU(env);
|
||||
|
||||
return !runstate_is_running() || cpu->stopped;
|
||||
}
|
||||
|
||||
static void do_vm_stop(RunState state)
|
||||
@ -455,7 +457,7 @@ static int cpu_can_run(CPUArchState *env)
|
||||
if (cpu->stop) {
|
||||
return 0;
|
||||
}
|
||||
if (env->stopped || !runstate_is_running()) {
|
||||
if (cpu->stopped || !runstate_is_running()) {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
@ -463,9 +465,11 @@ static int cpu_can_run(CPUArchState *env)
|
||||
|
||||
static void cpu_handle_guest_debug(CPUArchState *env)
|
||||
{
|
||||
CPUState *cpu = ENV_GET_CPU(env);
|
||||
|
||||
gdb_set_stop_cpu(env);
|
||||
qemu_system_debug_request();
|
||||
env->stopped = 1;
|
||||
cpu->stopped = true;
|
||||
}
|
||||
|
||||
static void cpu_signal(int sig)
|
||||
@ -693,7 +697,7 @@ static void qemu_wait_io_event_common(CPUArchState *env)
|
||||
|
||||
if (cpu->stop) {
|
||||
cpu->stop = false;
|
||||
env->stopped = 1;
|
||||
cpu->stopped = true;
|
||||
qemu_cond_signal(&qemu_pause_cond);
|
||||
}
|
||||
flush_queued_work(env);
|
||||
@ -829,7 +833,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
|
||||
qemu_cond_signal(&qemu_cpu_cond);
|
||||
|
||||
/* wait for initial kick-off after machine start */
|
||||
while (first_cpu->stopped) {
|
||||
while (ENV_GET_CPU(first_cpu)->stopped) {
|
||||
qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex);
|
||||
|
||||
/* process any pending work */
|
||||
@ -930,7 +934,8 @@ static int all_vcpus_paused(void)
|
||||
CPUArchState *penv = first_cpu;
|
||||
|
||||
while (penv) {
|
||||
if (!penv->stopped) {
|
||||
CPUState *pcpu = ENV_GET_CPU(penv);
|
||||
if (!pcpu->stopped) {
|
||||
return 0;
|
||||
}
|
||||
penv = penv->next_cpu;
|
||||
@ -957,7 +962,7 @@ void pause_all_vcpus(void)
|
||||
while (penv) {
|
||||
CPUState *pcpu = ENV_GET_CPU(penv);
|
||||
pcpu->stop = 0;
|
||||
penv->stopped = 1;
|
||||
pcpu->stopped = true;
|
||||
penv = penv->next_cpu;
|
||||
}
|
||||
return;
|
||||
@ -982,7 +987,7 @@ void resume_all_vcpus(void)
|
||||
while (penv) {
|
||||
CPUState *pcpu = ENV_GET_CPU(penv);
|
||||
pcpu->stop = false;
|
||||
penv->stopped = 0;
|
||||
pcpu->stopped = false;
|
||||
qemu_cpu_kick(penv);
|
||||
penv = penv->next_cpu;
|
||||
}
|
||||
@ -1045,10 +1050,11 @@ static void qemu_dummy_start_vcpu(CPUArchState *env)
|
||||
void qemu_init_vcpu(void *_env)
|
||||
{
|
||||
CPUArchState *env = _env;
|
||||
CPUState *cpu = ENV_GET_CPU(env);
|
||||
|
||||
env->nr_cores = smp_cores;
|
||||
env->nr_threads = smp_threads;
|
||||
env->stopped = 1;
|
||||
cpu->stopped = true;
|
||||
if (kvm_enabled()) {
|
||||
qemu_kvm_start_vcpu(env);
|
||||
} else if (tcg_enabled()) {
|
||||
@ -1063,7 +1069,7 @@ void cpu_stop_current(void)
|
||||
if (cpu_single_env) {
|
||||
CPUState *cpu_single_cpu = ENV_GET_CPU(cpu_single_env);
|
||||
cpu_single_cpu->stop = false;
|
||||
cpu_single_env->stopped = 1;
|
||||
cpu_single_cpu->stopped = true;
|
||||
cpu_exit(cpu_single_env);
|
||||
qemu_cond_signal(&qemu_pause_cond);
|
||||
}
|
||||
@ -1155,7 +1161,7 @@ static void tcg_exec_all(void)
|
||||
cpu_handle_guest_debug(env);
|
||||
break;
|
||||
}
|
||||
} else if (cpu->stop || env->stopped) {
|
||||
} else if (cpu->stop || cpu->stopped) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -92,6 +92,7 @@ static void mmubooke_create_initial_mapping(CPUPPCState *env,
|
||||
static void spin_kick(void *data)
|
||||
{
|
||||
SpinKick *kick = data;
|
||||
CPUState *cpu = CPU(kick->cpu);
|
||||
CPUPPCState *env = &kick->cpu->env;
|
||||
SpinInfo *curspin = kick->spin;
|
||||
hwaddr map_size = 64 * 1024 * 1024;
|
||||
@ -113,7 +114,7 @@ static void spin_kick(void *data)
|
||||
|
||||
env->halted = 0;
|
||||
env->exception_index = -1;
|
||||
env->stopped = 0;
|
||||
cpu->stopped = false;
|
||||
qemu_cpu_kick(env);
|
||||
}
|
||||
|
||||
|
@ -56,6 +56,7 @@ typedef struct CPUClass {
|
||||
* CPUState:
|
||||
* @created: Indicates whether the CPU thread has been successfully created.
|
||||
* @stop: Indicates a pending stop request.
|
||||
* @stopped: Indicates the CPU has been artificially stopped.
|
||||
*
|
||||
* State of one CPU core or thread.
|
||||
*/
|
||||
@ -71,6 +72,7 @@ struct CPUState {
|
||||
bool thread_kicked;
|
||||
bool created;
|
||||
bool stop;
|
||||
bool stopped;
|
||||
|
||||
/* TODO Move common fields from CPUArchState here. */
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user