mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
dump: add API to write dump header
the functions are used to write header of kdump-compressed format to vmcore. Header of kdump-compressed format includes: 1. common header: DiskDumpHeader32 / DiskDumpHeader64 2. sub header: KdumpSubHeader32 / KdumpSubHeader64 3. extra information: only elf notes here Signed-off-by: Qiao Nuohan <qiaonuohan@cn.fujitsu.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
7aad248d35
commit
298f116827
2 changed files with 319 additions and 0 deletions
|
@ -27,6 +27,19 @@
|
|||
#define pfn_to_paddr(X, page_shift) \
|
||||
(((unsigned long long)(X) + ARCH_PFN_OFFSET) << (page_shift))
|
||||
|
||||
/*
|
||||
* flag for compressed format
|
||||
*/
|
||||
#define DUMP_DH_COMPRESSED_ZLIB (0x1)
|
||||
#define DUMP_DH_COMPRESSED_LZO (0x2)
|
||||
#define DUMP_DH_COMPRESSED_SNAPPY (0x4)
|
||||
|
||||
#define KDUMP_SIGNATURE "KDUMP "
|
||||
#define SIG_LEN (sizeof(KDUMP_SIGNATURE) - 1)
|
||||
#define PHYS_BASE (0)
|
||||
#define DUMP_LEVEL (1)
|
||||
#define DISKDUMP_HEADER_BLOCKS (1)
|
||||
|
||||
typedef struct ArchDumpInfo {
|
||||
int d_machine; /* Architecture */
|
||||
int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */
|
||||
|
@ -44,6 +57,89 @@ typedef struct QEMU_PACKED MakedumpfileDataHeader {
|
|||
int64_t buf_size;
|
||||
} MakedumpfileDataHeader;
|
||||
|
||||
typedef struct QEMU_PACKED NewUtsname {
|
||||
char sysname[65];
|
||||
char nodename[65];
|
||||
char release[65];
|
||||
char version[65];
|
||||
char machine[65];
|
||||
char domainname[65];
|
||||
} NewUtsname;
|
||||
|
||||
typedef struct QEMU_PACKED DiskDumpHeader32 {
|
||||
char signature[SIG_LEN]; /* = "KDUMP " */
|
||||
uint32_t header_version; /* Dump header version */
|
||||
NewUtsname utsname; /* copy of system_utsname */
|
||||
char timestamp[10]; /* Time stamp */
|
||||
uint32_t status; /* Above flags */
|
||||
uint32_t block_size; /* Size of a block in byte */
|
||||
uint32_t sub_hdr_size; /* Size of arch dependent header in block */
|
||||
uint32_t bitmap_blocks; /* Size of Memory bitmap in block */
|
||||
uint32_t max_mapnr; /* = max_mapnr ,
|
||||
obsoleted in header_version 6 */
|
||||
uint32_t total_ram_blocks; /* Number of blocks should be written */
|
||||
uint32_t device_blocks; /* Number of total blocks in dump device */
|
||||
uint32_t written_blocks; /* Number of written blocks */
|
||||
uint32_t current_cpu; /* CPU# which handles dump */
|
||||
uint32_t nr_cpus; /* Number of CPUs */
|
||||
} DiskDumpHeader32;
|
||||
|
||||
typedef struct QEMU_PACKED DiskDumpHeader64 {
|
||||
char signature[SIG_LEN]; /* = "KDUMP " */
|
||||
uint32_t header_version; /* Dump header version */
|
||||
NewUtsname utsname; /* copy of system_utsname */
|
||||
char timestamp[22]; /* Time stamp */
|
||||
uint32_t status; /* Above flags */
|
||||
uint32_t block_size; /* Size of a block in byte */
|
||||
uint32_t sub_hdr_size; /* Size of arch dependent header in block */
|
||||
uint32_t bitmap_blocks; /* Size of Memory bitmap in block */
|
||||
uint32_t max_mapnr; /* = max_mapnr,
|
||||
obsoleted in header_version 6 */
|
||||
uint32_t total_ram_blocks; /* Number of blocks should be written */
|
||||
uint32_t device_blocks; /* Number of total blocks in dump device */
|
||||
uint32_t written_blocks; /* Number of written blocks */
|
||||
uint32_t current_cpu; /* CPU# which handles dump */
|
||||
uint32_t nr_cpus; /* Number of CPUs */
|
||||
} DiskDumpHeader64;
|
||||
|
||||
typedef struct QEMU_PACKED KdumpSubHeader32 {
|
||||
uint32_t phys_base;
|
||||
uint32_t dump_level; /* header_version 1 and later */
|
||||
uint32_t split; /* header_version 2 and later */
|
||||
uint32_t start_pfn; /* header_version 2 and later,
|
||||
obsoleted in header_version 6 */
|
||||
uint32_t end_pfn; /* header_version 2 and later,
|
||||
obsoleted in header_version 6 */
|
||||
uint64_t offset_vmcoreinfo; /* header_version 3 and later */
|
||||
uint32_t size_vmcoreinfo; /* header_version 3 and later */
|
||||
uint64_t offset_note; /* header_version 4 and later */
|
||||
uint32_t note_size; /* header_version 4 and later */
|
||||
uint64_t offset_eraseinfo; /* header_version 5 and later */
|
||||
uint32_t size_eraseinfo; /* header_version 5 and later */
|
||||
uint64_t start_pfn_64; /* header_version 6 and later */
|
||||
uint64_t end_pfn_64; /* header_version 6 and later */
|
||||
uint64_t max_mapnr_64; /* header_version 6 and later */
|
||||
} KdumpSubHeader32;
|
||||
|
||||
typedef struct QEMU_PACKED KdumpSubHeader64 {
|
||||
uint64_t phys_base;
|
||||
uint32_t dump_level; /* header_version 1 and later */
|
||||
uint32_t split; /* header_version 2 and later */
|
||||
uint64_t start_pfn; /* header_version 2 and later,
|
||||
obsoleted in header_version 6 */
|
||||
uint64_t end_pfn; /* header_version 2 and later,
|
||||
obsoleted in header_version 6 */
|
||||
uint64_t offset_vmcoreinfo; /* header_version 3 and later */
|
||||
uint64_t size_vmcoreinfo; /* header_version 3 and later */
|
||||
uint64_t offset_note; /* header_version 4 and later */
|
||||
uint64_t note_size; /* header_version 4 and later */
|
||||
uint64_t offset_eraseinfo; /* header_version 5 and later */
|
||||
uint64_t size_eraseinfo; /* header_version 5 and later */
|
||||
uint64_t start_pfn_64; /* header_version 6 and later */
|
||||
uint64_t end_pfn_64; /* header_version 6 and later */
|
||||
uint64_t max_mapnr_64; /* header_version 6 and later */
|
||||
} KdumpSubHeader64;
|
||||
|
||||
struct GuestPhysBlockList; /* memory_mapping.h */
|
||||
int cpu_get_dump_info(ArchDumpInfo *info,
|
||||
const struct GuestPhysBlockList *guest_phys_blocks);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue