dump-guest-memory: using static DumpState, add DumpStatus
Instead of malloc/free each time for DumpState, make it static. Added DumpStatus to show status for dump. This is to be used for detached dump. Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Message-Id: <1455772616-8668-4-git-send-email-peterx@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									228de9cf1d
								
							
						
					
					
						commit
						baf28f57e2
					
				
							
								
								
									
										21
									
								
								dump.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								dump.c
									
									
									
									
									
								
							| @ -1442,6 +1442,14 @@ static void get_max_mapnr(DumpState *s) | ||||
|     s->max_mapnr = dump_paddr_to_pfn(s, last_block->target_end); | ||||
| } | ||||
| 
 | ||||
| static DumpState dump_state_global = { .status = DUMP_STATUS_NONE }; | ||||
| 
 | ||||
| static void dump_state_prepare(DumpState *s) | ||||
| { | ||||
|     /* zero the struct, setting status to active */ | ||||
|     *s = (DumpState) { .status = DUMP_STATUS_ACTIVE }; | ||||
| } | ||||
| 
 | ||||
| static void dump_init(DumpState *s, int fd, bool has_format, | ||||
|                       DumpGuestMemoryFormat format, bool paging, bool has_filter, | ||||
|                       int64_t begin, int64_t length, Error **errp) | ||||
| @ -1676,24 +1684,27 @@ void qmp_dump_guest_memory(bool paging, const char *file, | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     s = g_malloc0(sizeof(DumpState)); | ||||
|     s = &dump_state_global; | ||||
|     dump_state_prepare(s); | ||||
| 
 | ||||
|     dump_init(s, fd, has_format, format, paging, has_begin, | ||||
|               begin, length, &local_err); | ||||
|     if (local_err) { | ||||
|         g_free(s); | ||||
|         error_propagate(errp, local_err); | ||||
|         s->status = DUMP_STATUS_FAILED; | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { | ||||
|         create_kdump_vmcore(s, errp); | ||||
|         create_kdump_vmcore(s, &local_err); | ||||
|     } else { | ||||
|         create_vmcore(s, errp); | ||||
|         create_vmcore(s, &local_err); | ||||
|     } | ||||
| 
 | ||||
|     s->status = (local_err ? DUMP_STATUS_FAILED : DUMP_STATUS_COMPLETED); | ||||
|     error_propagate(errp, local_err); | ||||
| 
 | ||||
|     dump_cleanup(s); | ||||
|     g_free(s); | ||||
| } | ||||
| 
 | ||||
| DumpGuestMemoryCapability *qmp_query_dump_guest_memory_capability(Error **errp) | ||||
|  | ||||
| @ -38,6 +38,7 @@ | ||||
| 
 | ||||
| #include "sysemu/dump-arch.h" | ||||
| #include "sysemu/memory_mapping.h" | ||||
| #include "qapi-types.h" | ||||
| 
 | ||||
| typedef struct QEMU_PACKED MakedumpfileHeader { | ||||
|     char signature[16];     /* = "makedumpfile" */ | ||||
| @ -176,6 +177,7 @@ typedef struct DumpState { | ||||
|     off_t offset_page;          /* offset of page part in vmcore */ | ||||
|     size_t num_dumpable;        /* number of page that can be dumped */ | ||||
|     uint32_t flag_compress;     /* indicate the compression format */ | ||||
|     DumpStatus status;          /* current dump status */ | ||||
| } DumpState; | ||||
| 
 | ||||
| uint16_t cpu_to_dump16(DumpState *s, uint16_t val); | ||||
|  | ||||
| @ -2218,6 +2218,24 @@ | ||||
|             '*begin': 'int', '*length': 'int', | ||||
|             '*format': 'DumpGuestMemoryFormat'} } | ||||
| 
 | ||||
| ## | ||||
| # @DumpStatus | ||||
| # | ||||
| # Describe the status of a long-running background guest memory dump. | ||||
| # | ||||
| # @none: no dump-guest-memory has started yet. | ||||
| # | ||||
| # @active: there is one dump running in background. | ||||
| # | ||||
| # @completed: the last dump has finished successfully. | ||||
| # | ||||
| # @failed: the last dump has failed. | ||||
| # | ||||
| # Since 2.6 | ||||
| ## | ||||
| { 'enum': 'DumpStatus', | ||||
|   'data': [ 'none', 'active', 'completed', 'failed' ] } | ||||
| 
 | ||||
| ## | ||||
| # @DumpGuestMemoryCapability: | ||||
| # | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Peter Xu
						Peter Xu