postcopy: Wire up loadvm_postcopy_handle_ commands
Wire up more of the handlers for the commands on the destination side, in particular loadvm_postcopy_handle_run now has enough to start the guest running. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Amit Shah <amit.shah@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
		
							parent
							
								
									c76201ab52
								
							
						
					
					
						commit
						27c6825bd3
					
				@ -1479,12 +1479,33 @@ static int loadvm_postcopy_handle_listen(MigrationIncomingState *mis)
 | 
				
			|||||||
static int loadvm_postcopy_handle_run(MigrationIncomingState *mis)
 | 
					static int loadvm_postcopy_handle_run(MigrationIncomingState *mis)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PostcopyState ps = postcopy_state_set(POSTCOPY_INCOMING_RUNNING);
 | 
					    PostcopyState ps = postcopy_state_set(POSTCOPY_INCOMING_RUNNING);
 | 
				
			||||||
 | 
					    Error *local_err = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    trace_loadvm_postcopy_handle_run();
 | 
					    trace_loadvm_postcopy_handle_run();
 | 
				
			||||||
    if (ps != POSTCOPY_INCOMING_LISTENING) {
 | 
					    if (ps != POSTCOPY_INCOMING_LISTENING) {
 | 
				
			||||||
        error_report("CMD_POSTCOPY_RUN in wrong postcopy state (%d)", ps);
 | 
					        error_report("CMD_POSTCOPY_RUN in wrong postcopy state (%d)", ps);
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* TODO we should move all of this lot into postcopy_ram.c or a shared code
 | 
				
			||||||
 | 
					     * in migration.c
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    cpu_synchronize_all_post_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qemu_announce_self();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Make sure all file formats flush their mutable metadata */
 | 
				
			||||||
 | 
					    bdrv_invalidate_cache_all(&local_err);
 | 
				
			||||||
 | 
					    if (local_err) {
 | 
				
			||||||
 | 
					        error_report_err(local_err);
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    trace_loadvm_postcopy_handle_run_cpu_sync();
 | 
				
			||||||
 | 
					    cpu_synchronize_all_post_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    trace_loadvm_postcopy_handle_run_vmstart();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (autostart) {
 | 
					    if (autostart) {
 | 
				
			||||||
        /* Hold onto your hats, starting the CPU */
 | 
					        /* Hold onto your hats, starting the CPU */
 | 
				
			||||||
        vm_start();
 | 
					        vm_start();
 | 
				
			||||||
@ -1493,7 +1514,12 @@ static int loadvm_postcopy_handle_run(MigrationIncomingState *mis)
 | 
				
			|||||||
        runstate_set(RUN_STATE_PAUSED);
 | 
					        runstate_set(RUN_STATE_PAUSED);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    /* We need to finish reading the stream from the package
 | 
				
			||||||
 | 
					     * and also stop reading anything more from the stream that loaded the
 | 
				
			||||||
 | 
					     * package (since it's now being read by the listener thread).
 | 
				
			||||||
 | 
					     * LOADVM_QUIT will quit all the layers of nested loadvm loops.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    return LOADVM_QUIT;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 | 
				
			|||||||
@ -1215,6 +1215,8 @@ loadvm_handle_cmd_packaged_received(int ret) "%d"
 | 
				
			|||||||
loadvm_postcopy_handle_advise(void) ""
 | 
					loadvm_postcopy_handle_advise(void) ""
 | 
				
			||||||
loadvm_postcopy_handle_listen(void) ""
 | 
					loadvm_postcopy_handle_listen(void) ""
 | 
				
			||||||
loadvm_postcopy_handle_run(void) ""
 | 
					loadvm_postcopy_handle_run(void) ""
 | 
				
			||||||
 | 
					loadvm_postcopy_handle_run_cpu_sync(void) ""
 | 
				
			||||||
 | 
					loadvm_postcopy_handle_run_vmstart(void) ""
 | 
				
			||||||
loadvm_postcopy_ram_handle_discard(void) ""
 | 
					loadvm_postcopy_ram_handle_discard(void) ""
 | 
				
			||||||
loadvm_postcopy_ram_handle_discard_end(void) ""
 | 
					loadvm_postcopy_ram_handle_discard_end(void) ""
 | 
				
			||||||
loadvm_postcopy_ram_handle_discard_header(const char *ramid, uint16_t len) "%s: %ud"
 | 
					loadvm_postcopy_ram_handle_discard_header(const char *ramid, uint16_t len) "%s: %ud"
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user