From: Luiz Capitulino <lcapitulino@redhat.com>
To: peter.maydell@linaro.org
Cc: qemu-devel@nongnu.org, anthony@codemonkey.ws
Subject: [Qemu-devel] [PULL 07/22] dump: add API to write header of flatten format
Date: Thu, 13 Feb 2014 10:30:25 -0500 [thread overview]
Message-ID: <1392305440-30465-8-git-send-email-lcapitulino@redhat.com> (raw)
In-Reply-To: <1392305440-30465-1-git-send-email-lcapitulino@redhat.com>
From: qiaonuohan <qiaonuohan@cn.fujitsu.com>
flatten format will be used when writing kdump-compressed format. The format is
also used by makedumpfile, you can refer to the following URL to get more
detailed information about flatten format of kdump-compressed format:
http://sourceforge.net/projects/makedumpfile/
The two functions here are used to write start flat header and end flat header
to vmcore, and they will be called later when flatten format is used.
struct MakedumpfileHeader stored at the head of vmcore is used to indicate the
vmcore is in flatten format.
struct MakedumpfileHeader {
char signature[16]; /* = "makedumpfile" */
int64_t type; /* = 1 */
int64_t version; /* = 1 */
};
And struct MakedumpfileDataHeader, with offset and buf_size set to -1, is used
to indicate the end of vmcore in flatten format.
struct MakedumpfileDataHeader {
int64_t offset; /* = -1 */
int64_t buf_size; /* = -1 */
};
Signed-off-by: Qiao Nuohan <qiaonuohan@cn.fujitsu.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
dump.c | 42 ++++++++++++++++++++++++++++++++++++++++++
include/sysemu/dump.h | 17 +++++++++++++++++
2 files changed, 59 insertions(+)
diff --git a/dump.c b/dump.c
index c9d3492..f233b3e 100644
--- a/dump.c
+++ b/dump.c
@@ -686,6 +686,48 @@ static int create_vmcore(DumpState *s)
return 0;
}
+static int write_start_flat_header(int fd)
+{
+ uint8_t *buf;
+ MakedumpfileHeader mh;
+ int ret = 0;
+
+ memset(&mh, 0, sizeof(mh));
+ strncpy(mh.signature, MAKEDUMPFILE_SIGNATURE,
+ strlen(MAKEDUMPFILE_SIGNATURE));
+
+ mh.type = cpu_to_be64(TYPE_FLAT_HEADER);
+ mh.version = cpu_to_be64(VERSION_FLAT_HEADER);
+
+ buf = g_malloc0(MAX_SIZE_MDF_HEADER);
+ memcpy(buf, &mh, sizeof(mh));
+
+ size_t written_size;
+ written_size = qemu_write_full(fd, buf, MAX_SIZE_MDF_HEADER);
+ if (written_size != MAX_SIZE_MDF_HEADER) {
+ ret = -1;
+ }
+
+ g_free(buf);
+ return ret;
+}
+
+static int write_end_flat_header(int fd)
+{
+ MakedumpfileDataHeader mdh;
+
+ mdh.offset = END_FLAG_FLAT_HEADER;
+ mdh.buf_size = END_FLAG_FLAT_HEADER;
+
+ size_t written_size;
+ written_size = qemu_write_full(fd, &mdh, sizeof(mdh));
+ if (written_size != sizeof(mdh)) {
+ return -1;
+ }
+
+ return 0;
+}
+
static ram_addr_t get_start_block(DumpState *s)
{
GuestPhysBlock *block;
diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h
index 19fafb2..b32b390 100644
--- a/include/sysemu/dump.h
+++ b/include/sysemu/dump.h
@@ -14,12 +14,29 @@
#ifndef DUMP_H
#define DUMP_H
+#define MAKEDUMPFILE_SIGNATURE "makedumpfile"
+#define MAX_SIZE_MDF_HEADER (4096) /* max size of makedumpfile_header */
+#define TYPE_FLAT_HEADER (1) /* type of flattened format */
+#define VERSION_FLAT_HEADER (1) /* version of flattened format */
+#define END_FLAG_FLAT_HEADER (-1)
+
typedef struct ArchDumpInfo {
int d_machine; /* Architecture */
int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */
int d_class; /* ELFCLASS32 or ELFCLASS64 */
} ArchDumpInfo;
+typedef struct QEMU_PACKED MakedumpfileHeader {
+ char signature[16]; /* = "makedumpfile" */
+ int64_t type;
+ int64_t version;
+} MakedumpfileHeader;
+
+typedef struct QEMU_PACKED MakedumpfileDataHeader {
+ int64_t offset;
+ int64_t buf_size;
+} MakedumpfileDataHeader;
+
struct GuestPhysBlockList; /* memory_mapping.h */
int cpu_get_dump_info(ArchDumpInfo *info,
const struct GuestPhysBlockList *guest_phys_blocks);
--
1.8.1.4
next prev parent reply other threads:[~2014-02-13 15:31 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-13 15:30 [Qemu-devel] [PULL 00/22] QMP queue Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 01/22] hmp: migrate command (without -d) now blocks correctly Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 02/22] QMP: allow JSON dict arguments in qmp-shell Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 03/22] Use error_is_set() only when necessary Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 04/22] qmp: expose list of supported character device backends Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 05/22] dump: const-qualify the buf of WriteCoreDumpFunction Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 06/22] dump: add argument to write_elfxx_notes Luiz Capitulino
2014-02-13 15:30 ` Luiz Capitulino [this message]
2014-02-13 15:30 ` [Qemu-devel] [PULL 08/22] dump: add API to write vmcore Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 09/22] dump: add API to write elf notes to buffer Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 10/22] dump: add support for lzo/snappy Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 11/22] dump: add members to DumpState and init some of them Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 12/22] dump: add API to write dump header Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 13/22] dump: add API to write dump_bitmap Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 14/22] dump: add APIs to operate DataCache Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 15/22] dump: add API to write dump pages Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 16/22] dump: make kdump-compressed format available for 'dump-guest-memory' Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 17/22] dump: Define the architecture for compressed dump format Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 18/22] dump: add 'query-dump-guest-memory-capability' command Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 19/22] monitor: Add device_del id argument completion Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 20/22] monitor: Add device_add device " Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 21/22] monitor: Add object_del id " Luiz Capitulino
2014-02-13 15:30 ` [Qemu-devel] [PULL 22/22] monitor: Add object_add class " Luiz Capitulino
2014-02-15 15:36 ` [Qemu-devel] [PULL 00/22] QMP queue Peter Maydell
2014-02-17 17:46 ` Luiz Capitulino
2014-02-20 13:07 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1392305440-30465-8-git-send-email-lcapitulino@redhat.com \
--to=lcapitulino@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).