Revision 4fdeee7c cpus.c
b/cpus.c | ||
---|---|---|
64 | 64 |
|
65 | 65 |
static bool cpu_thread_is_idle(CPUArchState *env) |
66 | 66 |
{ |
67 |
if (env->stop || env->queued_work_first) { |
|
67 |
CPUState *cpu = ENV_GET_CPU(env); |
|
68 |
|
|
69 |
if (cpu->stop || env->queued_work_first) { |
|
68 | 70 |
return false; |
69 | 71 |
} |
70 | 72 |
if (env->stopped || !runstate_is_running()) { |
... | ... | |
448 | 450 |
|
449 | 451 |
static int cpu_can_run(CPUArchState *env) |
450 | 452 |
{ |
451 |
if (env->stop) { |
|
453 |
CPUState *cpu = ENV_GET_CPU(env); |
|
454 |
|
|
455 |
if (cpu->stop) { |
|
452 | 456 |
return 0; |
453 | 457 |
} |
454 | 458 |
if (env->stopped || !runstate_is_running()) { |
... | ... | |
687 | 691 |
{ |
688 | 692 |
CPUState *cpu = ENV_GET_CPU(env); |
689 | 693 |
|
690 |
if (env->stop) {
|
|
691 |
env->stop = 0;
|
|
694 |
if (cpu->stop) {
|
|
695 |
cpu->stop = false;
|
|
692 | 696 |
env->stopped = 1; |
693 | 697 |
qemu_cond_signal(&qemu_pause_cond); |
694 | 698 |
} |
... | ... | |
941 | 945 |
|
942 | 946 |
qemu_clock_enable(vm_clock, false); |
943 | 947 |
while (penv) { |
944 |
penv->stop = 1; |
|
948 |
CPUState *pcpu = ENV_GET_CPU(penv); |
|
949 |
pcpu->stop = true; |
|
945 | 950 |
qemu_cpu_kick(penv); |
946 | 951 |
penv = penv->next_cpu; |
947 | 952 |
} |
... | ... | |
950 | 955 |
cpu_stop_current(); |
951 | 956 |
if (!kvm_enabled()) { |
952 | 957 |
while (penv) { |
953 |
penv->stop = 0; |
|
958 |
CPUState *pcpu = ENV_GET_CPU(penv); |
|
959 |
pcpu->stop = 0; |
|
954 | 960 |
penv->stopped = 1; |
955 | 961 |
penv = penv->next_cpu; |
956 | 962 |
} |
... | ... | |
974 | 980 |
|
975 | 981 |
qemu_clock_enable(vm_clock, true); |
976 | 982 |
while (penv) { |
977 |
penv->stop = 0; |
|
983 |
CPUState *pcpu = ENV_GET_CPU(penv); |
|
984 |
pcpu->stop = false; |
|
978 | 985 |
penv->stopped = 0; |
979 | 986 |
qemu_cpu_kick(penv); |
980 | 987 |
penv = penv->next_cpu; |
... | ... | |
1054 | 1061 |
void cpu_stop_current(void) |
1055 | 1062 |
{ |
1056 | 1063 |
if (cpu_single_env) { |
1057 |
cpu_single_env->stop = 0; |
|
1064 |
CPUState *cpu_single_cpu = ENV_GET_CPU(cpu_single_env); |
|
1065 |
cpu_single_cpu->stop = false; |
|
1058 | 1066 |
cpu_single_env->stopped = 1; |
1059 | 1067 |
cpu_exit(cpu_single_env); |
1060 | 1068 |
qemu_cond_signal(&qemu_pause_cond); |
... | ... | |
1136 | 1144 |
} |
1137 | 1145 |
for (; next_cpu != NULL && !exit_request; next_cpu = next_cpu->next_cpu) { |
1138 | 1146 |
CPUArchState *env = next_cpu; |
1147 |
CPUState *cpu = ENV_GET_CPU(env); |
|
1139 | 1148 |
|
1140 | 1149 |
qemu_clock_enable(vm_clock, |
1141 | 1150 |
(env->singlestep_enabled & SSTEP_NOTIMER) == 0); |
... | ... | |
1146 | 1155 |
cpu_handle_guest_debug(env); |
1147 | 1156 |
break; |
1148 | 1157 |
} |
1149 |
} else if (env->stop || env->stopped) {
|
|
1158 |
} else if (cpu->stop || env->stopped) {
|
|
1150 | 1159 |
break; |
1151 | 1160 |
} |
1152 | 1161 |
} |
Also available in: Unified diff