move vm_start to cpus.c
This patch: * moves vm_start to cpus.c. * exports qemu_vmstop_requested, since it's needed by vm_start. * extracts vm_prepare_start from vm_start; it does what vm_start did, except restarting the cpus. * vm_start now calls vm_prepare_start and then restarts the cpus. Signed-off-by: Claudio Imbrenda <imbrenda@linux.vnet.ibm.com> Message-Id: <1487092068-16562-2-git-send-email-imbrenda@linux.vnet.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									1c64fdbc81
								
							
						
					
					
						commit
						2d76e82395
					
				
							
								
								
									
										42
									
								
								cpus.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								cpus.c
									
									
									
									
									
								
							| @ -1578,6 +1578,48 @@ int vm_stop(RunState state) | ||||
|     return do_vm_stop(state); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Prepare for (re)starting the VM. | ||||
|  * Returns -1 if the vCPUs are not to be restarted (e.g. if they are already | ||||
|  * running or in case of an error condition), 0 otherwise. | ||||
|  */ | ||||
| int vm_prepare_start(void) | ||||
| { | ||||
|     RunState requested; | ||||
|     int res = 0; | ||||
| 
 | ||||
|     qemu_vmstop_requested(&requested); | ||||
|     if (runstate_is_running() && requested == RUN_STATE__MAX) { | ||||
|         return -1; | ||||
|     } | ||||
| 
 | ||||
|     /* Ensure that a STOP/RESUME pair of events is emitted if a
 | ||||
|      * vmstop request was pending.  The BLOCK_IO_ERROR event, for | ||||
|      * example, according to documentation is always followed by | ||||
|      * the STOP event. | ||||
|      */ | ||||
|     if (runstate_is_running()) { | ||||
|         qapi_event_send_stop(&error_abort); | ||||
|         res = -1; | ||||
|     } else { | ||||
|         replay_enable_events(); | ||||
|         cpu_enable_ticks(); | ||||
|         runstate_set(RUN_STATE_RUNNING); | ||||
|         vm_state_notify(1, RUN_STATE_RUNNING); | ||||
|     } | ||||
| 
 | ||||
|     /* We are sending this now, but the CPUs will be resumed shortly later */ | ||||
|     qapi_event_send_resume(&error_abort); | ||||
|     return res; | ||||
| } | ||||
| 
 | ||||
| void vm_start(void) | ||||
| { | ||||
|     if (!vm_prepare_start()) { | ||||
|         resume_all_vcpus(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /* does a state transition even if the VM is already stopped,
 | ||||
|    current state is forgotten forever */ | ||||
| int vm_stop_force_state(RunState state) | ||||
|  | ||||
| @ -37,6 +37,7 @@ void vm_state_notify(int running, RunState state); | ||||
| #define VMRESET_REPORT   true | ||||
| 
 | ||||
| void vm_start(void); | ||||
| int vm_prepare_start(void); | ||||
| int vm_stop(RunState state); | ||||
| int vm_stop_force_state(RunState state); | ||||
| 
 | ||||
| @ -60,6 +61,7 @@ void qemu_register_powerdown_notifier(Notifier *notifier); | ||||
| void qemu_system_debug_request(void); | ||||
| void qemu_system_vmstop_request(RunState reason); | ||||
| void qemu_system_vmstop_request_prepare(void); | ||||
| bool qemu_vmstop_requested(RunState *r); | ||||
| int qemu_shutdown_requested_get(void); | ||||
| int qemu_reset_requested_get(void); | ||||
| void qemu_system_killed(int signal, pid_t pid); | ||||
|  | ||||
							
								
								
									
										30
									
								
								vl.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								vl.c
									
									
									
									
									
								
							| @ -724,7 +724,7 @@ StatusInfo *qmp_query_status(Error **errp) | ||||
|     return info; | ||||
| } | ||||
| 
 | ||||
| static bool qemu_vmstop_requested(RunState *r) | ||||
| bool qemu_vmstop_requested(RunState *r) | ||||
| { | ||||
|     qemu_mutex_lock(&vmstop_lock); | ||||
|     *r = vmstop_requested; | ||||
| @ -745,34 +745,6 @@ void qemu_system_vmstop_request(RunState state) | ||||
|     qemu_notify_event(); | ||||
| } | ||||
| 
 | ||||
| void vm_start(void) | ||||
| { | ||||
|     RunState requested; | ||||
| 
 | ||||
|     qemu_vmstop_requested(&requested); | ||||
|     if (runstate_is_running() && requested == RUN_STATE__MAX) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     /* Ensure that a STOP/RESUME pair of events is emitted if a
 | ||||
|      * vmstop request was pending.  The BLOCK_IO_ERROR event, for | ||||
|      * example, according to documentation is always followed by | ||||
|      * the STOP event. | ||||
|      */ | ||||
|     if (runstate_is_running()) { | ||||
|         qapi_event_send_stop(&error_abort); | ||||
|     } else { | ||||
|         replay_enable_events(); | ||||
|         cpu_enable_ticks(); | ||||
|         runstate_set(RUN_STATE_RUNNING); | ||||
|         vm_state_notify(1, RUN_STATE_RUNNING); | ||||
|         resume_all_vcpus(); | ||||
|     } | ||||
| 
 | ||||
|     qapi_event_send_resume(&error_abort); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /***********************************************************/ | ||||
| /* real time host monotonic timer */ | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Claudio Imbrenda
						Claudio Imbrenda