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