All of lore.kernel.org
 help / color / mirror / Atom feed
From: qiaonuohan <qiaonuohan@cn.fujitsu.com>
To: lersek@redhat.com, stefanha@gmail.com, lcapitulino@redhat.com,
	afaerber@suse.de, eblake@redhat.com
Cc: kumagai-atsushi@mxc.nes.nec.co.jp,
	qiaonuohan <qiaonuohan@cn.fujitsu.com>,
	anderson@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH v8 03/13] dump: add API to write header of flatten format
Date: Tue, 28 Jan 2014 14:21:56 +0800	[thread overview]
Message-ID: <1390890126-17377-4-git-send-email-qiaonuohan@cn.fujitsu.com> (raw)
In-Reply-To: <1390890126-17377-1-git-send-email-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>
---
 dump.c                |   42 ++++++++++++++++++++++++++++++++++++++++++
 include/sysemu/dump.h |   17 +++++++++++++++++
 2 files changed, 59 insertions(+), 0 deletions(-)

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.7.1

  parent reply	other threads:[~2014-01-28  6:23 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-28  6:21 [Qemu-devel] [PATCH v8 00/13] Make 'dump-guest-memory' dump in kdump-compressed format qiaonuohan
2014-01-28  6:21 ` [Qemu-devel] [PATCH v8 01/13] dump: const-qualify the buf of WriteCoreDumpFunction qiaonuohan
2014-01-28  6:21 ` [Qemu-devel] [PATCH v8 02/13] dump: add argument to write_elfxx_notes qiaonuohan
2014-01-28  6:21 ` qiaonuohan [this message]
2014-02-10 19:35   ` [Qemu-devel] [PATCH v8 03/13] dump: add API to write header of flatten format Luiz Capitulino
2014-02-10 21:57     ` Laszlo Ersek
2014-02-10 22:48       ` Luiz Capitulino
2014-02-10 23:20         ` Laszlo Ersek
2014-02-11  9:06           ` Markus Armbruster
2014-01-28  6:21 ` [Qemu-devel] [PATCH v8 04/13] dump: add API to write vmcore qiaonuohan
2014-01-28  6:21 ` [Qemu-devel] [PATCH v8 05/13] dump: add API to write elf notes to buffer qiaonuohan
2014-01-28  6:21 ` [Qemu-devel] [PATCH v8 06/13] dump: add support for lzo/snappy qiaonuohan
2014-01-28  6:22 ` [Qemu-devel] [PATCH v8 07/13] dump: add members to DumpState and init some of them qiaonuohan
2014-01-29 14:11   ` Laszlo Ersek
2014-01-28  6:22 ` [Qemu-devel] [PATCH v8 08/13] dump: add API to write dump header qiaonuohan
2014-01-28 11:51   ` Ekaterina Tumanova
2014-01-28 13:37     ` Laszlo Ersek
2014-01-28 14:42       ` Ekaterina Tumanova
2014-01-28 14:55         ` Laszlo Ersek
2014-01-29  1:39       ` Qiao Nuohan
2014-01-29 14:19   ` Laszlo Ersek
2014-01-30 17:14   ` Ekaterina Tumanova
2014-01-28  6:22 ` [Qemu-devel] [PATCH v8 09/13] dump: add API to write dump_bitmap qiaonuohan
2014-01-29 14:32   ` Laszlo Ersek
2014-01-28  6:22 ` [Qemu-devel] [PATCH v8 10/13] dump: add APIs to operate DataCache qiaonuohan
2014-01-28  6:22 ` [Qemu-devel] [PATCH v8 11/13] dump: add API to write dump pages qiaonuohan
2014-01-29 14:39   ` Laszlo Ersek
2014-01-28  6:22 ` [Qemu-devel] [PATCH v8 12/13] dump: make kdump-compressed format available for 'dump-guest-memory' qiaonuohan
2014-01-29 14:45   ` Laszlo Ersek
2014-01-28  6:22 ` [Qemu-devel] [PATCH v8 13/13] dump: add 'query-dump-guest-memory-capability' command qiaonuohan
2014-02-10 19:10   ` Luiz Capitulino
2014-02-10 22:02     ` Laszlo Ersek
2014-02-10 23:09       ` Paolo Bonzini
2014-02-10 23:09       ` Paolo Bonzini
2014-02-10 23:30         ` Laszlo Ersek
2014-02-10 23:34           ` Paolo Bonzini
2014-02-11  0:22             ` Laszlo Ersek
2014-02-11  2:37               ` Qiao Nuohan
2014-02-11  2:47             ` Luiz Capitulino
2014-02-11  3:20               ` Qiao Nuohan
2014-02-11  7:19               ` Paolo Bonzini
2014-02-11 13:26                 ` Eric Blake
2014-02-12  3:13                   ` [Qemu-devel] [PATCH v9 " Qiao Nuohan
2014-02-12  3:29                     ` Eric Blake
2014-02-12  6:34                       ` [Qemu-devel] [PATCH v10 " Qiao Nuohan
2014-02-12 14:49                         ` Luiz Capitulino
2014-02-13  1:48                           ` Qiao Nuohan
2014-02-13  2:57                             ` Luiz Capitulino
2014-02-13 13:13                             ` Eric Blake
2014-02-13 13:45                             ` Luiz Capitulino
2014-01-28  6:37 ` [Qemu-devel] [PATCH v8 00/13] Make 'dump-guest-memory' dump in kdump-compressed format Qiao Nuohan
2014-01-29 14:50 ` Laszlo Ersek
2014-01-30 17:01 ` [Qemu-devel] [PATCH] Define the architecture for compressed dump format Ekaterina Tumanova
2014-01-30 17:20   ` Laszlo Ersek
2014-01-31 13:45     ` [Qemu-devel] [PATCH v2] Define guest architecture for the compressed dump header Ekaterina Tumanova
2014-01-31 13:45       ` [Qemu-devel] [PATCH v2] Define the architecture for compressed dump format Ekaterina Tumanova
2014-01-31 13:56         ` Christian Borntraeger
2014-01-31 14:11         ` Laszlo Ersek
2014-01-31 15:04           ` [Qemu-devel] [PATCH v3 0/1] Detect arch for dump compressed header Ekaterina Tumanova
2014-01-31 15:04             ` [Qemu-devel] [PATCH v3 1/1] Define the architecture for compressed dump format Ekaterina Tumanova
2014-02-13 13:50               ` Luiz Capitulino
2014-01-31 17:14             ` [Qemu-devel] [PATCH v3 0/1] Detect arch for dump compressed header Laszlo Ersek
2014-02-10 21:23               ` Luiz Capitulino
2014-02-10 22:06                 ` Laszlo Ersek
2014-02-10  3:34             ` Qiao Nuohan
2014-02-10  8:29               ` Laszlo Ersek
2014-02-10  8:57                 ` Qiao Nuohan
2014-02-10 13:24                   ` Luiz Capitulino
2014-02-11 17:00 ` [Qemu-devel] [PATCH v8 00/13] Make 'dump-guest-memory' dump in kdump-compressed format Luiz Capitulino
2014-02-17 17:51   ` Luiz Capitulino
2014-02-18  6:16     ` Qiao Nuohan

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=1390890126-17377-4-git-send-email-qiaonuohan@cn.fujitsu.com \
    --to=qiaonuohan@cn.fujitsu.com \
    --cc=afaerber@suse.de \
    --cc=anderson@redhat.com \
    --cc=eblake@redhat.com \
    --cc=kumagai-atsushi@mxc.nes.nec.co.jp \
    --cc=lcapitulino@redhat.com \
    --cc=lersek@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.