[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 19/21] kdump: write vmcoreinfo in header
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PATCH 19/21] kdump: write vmcoreinfo in header |
Date: |
Sat, 11 Mar 2017 17:22:54 +0400 |
Signed-off-by: Marc-André Lureau <address@hidden>
---
dump.c | 48 ++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 44 insertions(+), 4 deletions(-)
diff --git a/dump.c b/dump.c
index 0ebfb5471a..bf88cb362b 100644
--- a/dump.c
+++ b/dump.c
@@ -785,8 +785,9 @@ static void create_header32(DumpState *s, Error **errp)
uint32_t sub_hdr_size;
uint32_t bitmap_blocks;
uint32_t status = 0;
- uint64_t offset_note;
+ uint64_t offset_note, offset_vmcoreinfo, size_vmcoreinfo = 0;
Error *local_err = NULL;
+ uint8_t *vmcoreinfo = NULL;
/* write common header, the version of kdump-compressed format is 6th */
size = sizeof(DiskDumpHeader32);
@@ -835,7 +836,18 @@ static void create_header32(DumpState *s, Error **errp)
kh->phys_base = cpu_to_dump32(s, s->dump_info.phys_base);
kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL);
- offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size;
+ offset_vmcoreinfo = DISKDUMP_HEADER_BLOCKS * block_size + size;
+ if (s->vmcoreinfo) {
+ uint64_t hsize, name_size;
+
+ get_note_sizes(s, s->vmcoreinfo, &hsize, &name_size, &size_vmcoreinfo);
+ vmcoreinfo =
+ s->vmcoreinfo + ((hsize + 3) / 4 + (name_size + 3) / 4) * 4;
+ kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo);
+ kh->size_vmcoreinfo = cpu_to_dump32(s, size_vmcoreinfo);
+ }
+
+ offset_note = offset_vmcoreinfo + size_vmcoreinfo;
kh->offset_note = cpu_to_dump64(s, offset_note);
kh->note_size = cpu_to_dump32(s, s->note_size);
@@ -845,6 +857,14 @@ static void create_header32(DumpState *s, Error **errp)
goto out;
}
+ if (vmcoreinfo) {
+ if (write_buffer(s->fd, offset_vmcoreinfo, vmcoreinfo,
+ size_vmcoreinfo) < 0) {
+ error_setg(errp, "dump: failed to vmcoreinfo");
+ goto out;
+ }
+ }
+
/* write note */
s->note_buf = g_malloc0(s->note_size);
s->note_buf_offset = 0;
@@ -885,8 +905,9 @@ static void create_header64(DumpState *s, Error **errp)
uint32_t sub_hdr_size;
uint32_t bitmap_blocks;
uint32_t status = 0;
- uint64_t offset_note;
+ uint64_t offset_note, offset_vmcoreinfo, size_vmcoreinfo = 0;
Error *local_err = NULL;
+ uint8_t *vmcoreinfo = NULL;
/* write common header, the version of kdump-compressed format is 6th */
size = sizeof(DiskDumpHeader64);
@@ -935,7 +956,18 @@ static void create_header64(DumpState *s, Error **errp)
kh->phys_base = cpu_to_dump64(s, s->dump_info.phys_base);
kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL);
- offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size;
+ offset_vmcoreinfo = DISKDUMP_HEADER_BLOCKS * block_size + size;
+ if (s->vmcoreinfo) {
+ uint64_t hsize, name_size;
+
+ get_note_sizes(s, s->vmcoreinfo, &hsize, &name_size, &size_vmcoreinfo);
+ vmcoreinfo =
+ s->vmcoreinfo + ((hsize + 3) / 4 + (name_size + 3) / 4) * 4;
+ kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo);
+ kh->size_vmcoreinfo = cpu_to_dump64(s, size_vmcoreinfo);
+ }
+
+ offset_note = offset_vmcoreinfo + size_vmcoreinfo;
kh->offset_note = cpu_to_dump64(s, offset_note);
kh->note_size = cpu_to_dump64(s, s->note_size);
@@ -945,6 +977,14 @@ static void create_header64(DumpState *s, Error **errp)
goto out;
}
+ if (vmcoreinfo) {
+ if (write_buffer(s->fd, offset_vmcoreinfo, vmcoreinfo,
+ size_vmcoreinfo) < 0) {
+ error_setg(errp, "dump: failed to vmcoreinfo");
+ goto out;
+ }
+ }
+
/* write note */
s->note_buf = g_malloc0(s->note_size);
s->note_buf_offset = 0;
--
2.12.0.191.gc5d8de91d
- [Qemu-devel] [PATCH 10/21] Use uint property getter/setter where appropriate, (continued)
- [Qemu-devel] [PATCH 10/21] Use uint property getter/setter where appropriate, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 11/21] qdict: learn to lookup quint, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 12/21] test-qga: drop everything until guest-sync, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 13/21] qga: report error on keyfile dump error, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 14/21] qga: add and populate VMDumpInfo, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 15/21] qga: register event emit function, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 16/21] qga: emit VMDUMP_INFO event, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 17/21] virtio-channel: parse qga stream for VMDUMP_INFO event, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 18/21] dump: use qga VMDUMP_INFO for ELF dump, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 19/21] kdump: write vmcoreinfo in header,
Marc-André Lureau <=
- [Qemu-devel] [PATCH 20/21] scripts/dump-guest-memory.py: fix int128_get64 on recent gcc, Marc-André Lureau, 2017/03/11
- [Qemu-devel] [PATCH 21/21] scripts/dump-guest-memory.py: add VMCOREINFO, Marc-André Lureau, 2017/03/11
- Re: [Qemu-devel] [PATCH 00/21] WIP: dump: add kaslr support (for after 2.9), no-reply, 2017/03/11
- Re: [Qemu-devel] [PATCH 00/21] WIP: dump: add kaslr support (for after 2.9), Dave Anderson, 2017/03/11