kdump: set vmcoreinfo location
kdump header provides offset and size of the vmcoreinfo content, append it if available (skip the ELF note header). crash-7.1.9 was the first version that started looking in the vmcoreinfo data for phys_base instead of in the kdump_sub_header. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
		
							parent
							
								
									d9feb51772
								
							
						
					
					
						commit
						9ada575bba
					
				
							
								
								
									
										24
									
								
								dump.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								dump.c
									
									
									
									
									
								
							@ -857,6 +857,18 @@ static void create_header32(DumpState *s, Error **errp)
 | 
				
			|||||||
    kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL);
 | 
					    kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size;
 | 
					    offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size;
 | 
				
			||||||
 | 
					    if (s->guest_note &&
 | 
				
			||||||
 | 
					        note_name_equal(s, s->guest_note, "VMCOREINFO")) {
 | 
				
			||||||
 | 
					        uint64_t hsize, name_size, size_vmcoreinfo_desc, offset_vmcoreinfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        get_note_sizes(s, s->guest_note,
 | 
				
			||||||
 | 
					                       &hsize, &name_size, &size_vmcoreinfo_desc);
 | 
				
			||||||
 | 
					        offset_vmcoreinfo = offset_note + s->note_size - s->guest_note_size +
 | 
				
			||||||
 | 
					            (DIV_ROUND_UP(hsize, 4) + DIV_ROUND_UP(name_size, 4)) * 4;
 | 
				
			||||||
 | 
					        kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo);
 | 
				
			||||||
 | 
					        kh->size_vmcoreinfo = cpu_to_dump32(s, size_vmcoreinfo_desc);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    kh->offset_note = cpu_to_dump64(s, offset_note);
 | 
					    kh->offset_note = cpu_to_dump64(s, offset_note);
 | 
				
			||||||
    kh->note_size = cpu_to_dump32(s, s->note_size);
 | 
					    kh->note_size = cpu_to_dump32(s, s->note_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -957,6 +969,18 @@ static void create_header64(DumpState *s, Error **errp)
 | 
				
			|||||||
    kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL);
 | 
					    kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size;
 | 
					    offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size;
 | 
				
			||||||
 | 
					    if (s->guest_note &&
 | 
				
			||||||
 | 
					        note_name_equal(s, s->guest_note, "VMCOREINFO")) {
 | 
				
			||||||
 | 
					        uint64_t hsize, name_size, size_vmcoreinfo_desc, offset_vmcoreinfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        get_note_sizes(s, s->guest_note,
 | 
				
			||||||
 | 
					                       &hsize, &name_size, &size_vmcoreinfo_desc);
 | 
				
			||||||
 | 
					        offset_vmcoreinfo = offset_note + s->note_size - s->guest_note_size +
 | 
				
			||||||
 | 
					            (DIV_ROUND_UP(hsize, 4) + DIV_ROUND_UP(name_size, 4)) * 4;
 | 
				
			||||||
 | 
					        kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo);
 | 
				
			||||||
 | 
					        kh->size_vmcoreinfo = cpu_to_dump64(s, size_vmcoreinfo_desc);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    kh->offset_note = cpu_to_dump64(s, offset_note);
 | 
					    kh->offset_note = cpu_to_dump64(s, offset_note);
 | 
				
			||||||
    kh->note_size = cpu_to_dump64(s, s->note_size);
 | 
					    kh->note_size = cpu_to_dump64(s, s->note_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user