cpu: Move stop field to CPUState
Change its type to bool. Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
		
							parent
							
								
									61a4621784
								
							
						
					
					
						commit
						4fdeee7cd4
					
				| @ -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;        \ | ||||
|  | ||||
							
								
								
									
										27
									
								
								cpus.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								cpus.c
									
									
									
									
									
								
							| @ -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()) { | ||||
| @ -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()) { | ||||
| @ -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); | ||||
|     } | ||||
| @ -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; | ||||
|     } | ||||
| @ -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; | ||||
|             } | ||||
| @ -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; | ||||
| @ -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); | ||||
| @ -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); | ||||
| @ -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; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -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. | ||||
|  */ | ||||
| @ -69,6 +70,7 @@ struct CPUState { | ||||
| #endif | ||||
|     bool thread_kicked; | ||||
|     bool created; | ||||
|     bool stop; | ||||
| 
 | ||||
|     /* TODO Move common fields from CPUArchState here. */ | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Andreas Färber
						Andreas Färber