From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41562) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WCwdp-0008TR-S0 for qemu-devel@nongnu.org; Mon, 10 Feb 2014 14:35:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WCwdk-00070X-Px for qemu-devel@nongnu.org; Mon, 10 Feb 2014 14:35:41 -0500 Received: from mx1.redhat.com ([209.132.183.28]:47272) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WCwdk-00070T-Cq for qemu-devel@nongnu.org; Mon, 10 Feb 2014 14:35:36 -0500 Date: Mon, 10 Feb 2014 14:35:26 -0500 From: Luiz Capitulino Message-ID: <20140210143526.0130040c@redhat.com> In-Reply-To: <1390890126-17377-4-git-send-email-qiaonuohan@cn.fujitsu.com> References: <1390890126-17377-1-git-send-email-qiaonuohan@cn.fujitsu.com> <1390890126-17377-4-git-send-email-qiaonuohan@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v8 03/13] dump: add API to write header of flatten format List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qiaonuohan Cc: stefanha@gmail.com, qemu-devel@nongnu.org, kumagai-atsushi@mxc.nes.nec.co.jp, anderson@redhat.com, lersek@redhat.com, afaerber@suse.de On Tue, 28 Jan 2014 14:21:56 +0800 qiaonuohan wrote: > flatten format will be used when writing kdump-compressed format. The for= mat 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/ >=20 > The two functions here are used to write start flat header and end flat h= eader > to vmcore, and they will be called later when flatten format is used. >=20 > struct MakedumpfileHeader stored at the head of vmcore is used to indicat= e the > vmcore is in flatten format. >=20 > struct MakedumpfileHeader { > char signature[16]; /* =3D "makedumpfile" */ > int64_t type; /* =3D 1 */ > int64_t version; /* =3D 1 */ > }; >=20 > And struct MakedumpfileDataHeader, with offset and buf_size set to -1, is= used > to indicate the end of vmcore in flatten format. >=20 > struct MakedumpfileDataHeader { > int64_t offset; /* =3D -1 */ > int64_t buf_size; /* =3D -1 */ > }; >=20 > Signed-off-by: Qiao Nuohan > Reviewed-by: Laszlo Ersek This patch breaks git bisect: /home/lcapitulino/work/src/upstream/qmp-unstable/dump.c:689:12: error: =E2= =80=98write_start_flat_header=E2=80=99 defined but not used [-Werror=3Dunus= ed-function] /home/lcapitulino/work/src/upstream/qmp-unstable/dump.c:715:12: error: =E2= =80=98write_end_flat_header=E2=80=99 defined but not used [-Werror=3Dunused= -function] cc1: all warnings being treated as errors make[1]: *** [dump.o] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [subdir-x86_64-softmmu] Error 2 > --- > dump.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > include/sysemu/dump.h | 17 +++++++++++++++++ > 2 files changed, 59 insertions(+), 0 deletions(-) >=20 > 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; > } > =20 > +static int write_start_flat_header(int fd) > +{ > + uint8_t *buf; > + MakedumpfileHeader mh; > + int ret =3D 0; > + > + memset(&mh, 0, sizeof(mh)); > + strncpy(mh.signature, MAKEDUMPFILE_SIGNATURE, > + strlen(MAKEDUMPFILE_SIGNATURE)); > + > + mh.type =3D cpu_to_be64(TYPE_FLAT_HEADER); > + mh.version =3D cpu_to_be64(VERSION_FLAT_HEADER); > + > + buf =3D g_malloc0(MAX_SIZE_MDF_HEADER); > + memcpy(buf, &mh, sizeof(mh)); > + > + size_t written_size; > + written_size =3D qemu_write_full(fd, buf, MAX_SIZE_MDF_HEADER); > + if (written_size !=3D MAX_SIZE_MDF_HEADER) { > + ret =3D -1; > + } > + > + g_free(buf); > + return ret; > +} > + > +static int write_end_flat_header(int fd) > +{ > + MakedumpfileDataHeader mdh; > + > + mdh.offset =3D END_FLAG_FLAT_HEADER; > + mdh.buf_size =3D END_FLAG_FLAT_HEADER; > + > + size_t written_size; > + written_size =3D qemu_write_full(fd, &mdh, sizeof(mdh)); > + if (written_size !=3D 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 > =20 > +#define MAKEDUMPFILE_SIGNATURE "makedumpfile" > +#define MAX_SIZE_MDF_HEADER (4096) /* max size of makedumpfile_h= eader */ > +#define TYPE_FLAT_HEADER (1) /* type of flattened format */ > +#define VERSION_FLAT_HEADER (1) /* version of flattened forma= t */ > +#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; > =20 > +typedef struct QEMU_PACKED MakedumpfileHeader { > + char signature[16]; /* =3D "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= );