From: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
To: Janosch Frank <frankja@linux.ibm.com>, qemu-devel@nongnu.org
Cc: marcandre.lureau@redhat.com, pbonzini@redhat.com,
mhartmay@linux.ibm.com, borntraeger@linux.ibm.com,
imbrenda@linux.ibm.com, pasic@linux.ibm.com, cohuck@redhat.com,
thuth@redhat.com, qemu-s390x@nongnu.org, seiden@linux.ibm.com
Subject: Re: [PATCH v4 08/17] dump: Split write of section headers and data and add a prepare step
Date: Fri, 29 Jul 2022 17:31:57 +0200 [thread overview]
Message-ID: <b75c4839-f9d3-ace8-7dbf-ef3fe840fa54@linux.ibm.com> (raw)
In-Reply-To: <20220726092248.128336-9-frankja@linux.ibm.com>
On 7/26/22 11:22, Janosch Frank wrote:
> By splitting the writing of the section headers and (future) section
> data we prepare for the addition of a string table section and
> architecture sections.
>
> At the same time we move the writing of the section to the end of the
> dump process. This allows the upcoming architecture section code to
> add data after all of the common dump data has been written.
>
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> ---
> dump/dump.c | 112 ++++++++++++++++++++++++++++++++----------
> include/sysemu/dump.h | 4 ++
> 2 files changed, 90 insertions(+), 26 deletions(-)
>
> diff --git a/dump/dump.c b/dump/dump.c
> index 8a7ce95610..a6bb7bfa21 100644
> --- a/dump/dump.c
> +++ b/dump/dump.c
> @@ -342,30 +342,69 @@ static void write_elf_phdr_note(DumpState *s, Error **errp)
> }
> }
>
> -static void write_elf_section(DumpState *s, int type, Error **errp)
> +static size_t prepare_elf_section_hdr_zero(DumpState *s)
You don't use the return value and it is well known, the length of a section
header entry.
> {
> - Elf32_Shdr shdr32;
> - Elf64_Shdr shdr64;
> - int shdr_size;
> - void *shdr;
> - int ret;
> + if (dump_is_64bit(s)) {
> + Elf64_Shdr *shdr64 = s->elf_section_hdrs;
>
> - if (type == 0) {
> - shdr_size = sizeof(Elf32_Shdr);
> - memset(&shdr32, 0, shdr_size);
> - shdr32.sh_info = cpu_to_dump32(s, s->phdr_num);
> - shdr = &shdr32;
> + shdr64->sh_info = cpu_to_dump32(s, s->phdr_num);
> } else {
> - shdr_size = sizeof(Elf64_Shdr);
> - memset(&shdr64, 0, shdr_size);
> - shdr64.sh_info = cpu_to_dump32(s, s->phdr_num);
> - shdr = &shdr64;
> + Elf32_Shdr *shdr32 = s->elf_section_hdrs;
> +
> + shdr32->sh_info = cpu_to_dump32(s, s->phdr_num);
> }
>
> - ret = fd_write_vmcore(shdr, shdr_size, s);
> + return dump_is_64bit(s) ? sizeof(Elf64_Shdr) : sizeof(Elf32_Shdr);
> +}
> +
[...]
> +
> +static void write_elf_sections(DumpState *s, Error **errp)
> +{
> + int ret;
> +
> + /* Write section zero */
> + ret = fd_write_vmcore(s->elf_section_data, s->elf_section_data_size, s);
> + if (ret < 0) {
> + error_setg_errno(errp, -ret, "dump: failed to write section data");
> }
> }
>
> @@ -557,12 +596,22 @@ static void dump_begin(DumpState *s, Error **errp)
> /* Write elf header to buffer */
> prepare_elf_header(s);
>
> + prepare_elf_sections(s, errp);
> + if (*errp) {
> + return;
> + }
> +
> /* Start to write stuff into file descriptor */
> write_elf_header(s, errp);
> if (*errp) {
> return;
> }
>
> + write_elf_section_headers(s, errp);
> + if (*errp) {
> + return;
> + }
> +
> /* write PT_NOTE to vmcore */
> write_elf_phdr_note(s, errp);
> if (*errp) {
> @@ -575,14 +624,6 @@ static void dump_begin(DumpState *s, Error **errp)
> return;
> }
>
> - /* write section to vmcore */
> - if (s->shdr_num) {
> - write_elf_section(s, 1, errp);
> - if (*errp) {
> - return;
> - }
> - }
> -
> /* write notes to vmcore */
> write_elf_notes(s, errp);
> }
> @@ -647,6 +688,19 @@ static void dump_iterate(DumpState *s, Error **errp)
> }
> }
>
> +static void dump_end(DumpState *s, Error **errp)
> +{
This function doesn't do anything yet, does it?
Not sure if I like splitting the patches like that, but squashing them will blow up the patch size.
Maybe you should just mention in the patch description which functionality remains
dormant and under what circumstances it will become active.
> + ERRP_GUARD();
> +
> + if (!s->elf_section_data_size) {
> + return;
> + }
> + s->elf_section_data = g_malloc0(s->elf_section_data_size);
> +
> + /* write sections to vmcore */
> + write_elf_sections(s, errp);
> +}
> +
> static void create_vmcore(DumpState *s, Error **errp)
> {
> ERRP_GUARD();
> @@ -657,6 +711,12 @@ static void create_vmcore(DumpState *s, Error **errp)
> }
>
> dump_iterate(s, errp);
> + if (*errp) {
> + return;
> + }
> +
> + /* Write section data after memory has been dumped */
> + dump_end(s, errp);
> }
>
> static int write_start_flat_header(int fd)
> diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h
> index 7f9a848573..686555f908 100644
> --- a/include/sysemu/dump.h
> +++ b/include/sysemu/dump.h
> @@ -172,6 +172,10 @@ typedef struct DumpState {
> int64_t length; /* Length of the dump we want to dump */
>
> void *elf_header;
> + void *elf_section_hdrs;
> + uint64_t elf_section_data_size;
> + void *elf_section_data;
> +
> uint8_t *note_buf; /* buffer for notes */
> size_t note_buf_offset; /* the writing place in note_buf */
> uint32_t nr_cpus; /* number of guest's cpu */
next prev parent reply other threads:[~2022-07-29 15:33 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-26 9:22 [PATCH v4 00/17] dump: Add arch section and s390x PV dump Janosch Frank
2022-07-26 9:22 ` [PATCH v4 01/17] dump: Rename write_elf_loads to write_elf_phdr_loads Janosch Frank
2022-07-27 18:25 ` Janis Schoetterl-Glausch
2022-07-28 17:20 ` Steffen Eiden
2022-07-26 9:22 ` [PATCH v4 02/17] dump: Introduce GuestPhysBlock offset and length filter functions Janosch Frank
2022-07-26 11:35 ` Marc-André Lureau
2022-07-26 13:01 ` Janosch Frank
2022-07-26 13:11 ` Marc-André Lureau
2022-07-27 10:49 ` Janis Schoetterl-Glausch
2022-07-26 9:22 ` [PATCH v4 03/17] dump: Convert GuestPhysBlock iterators and use the " Janosch Frank
2022-07-27 18:34 ` Janis Schoetterl-Glausch
2022-07-26 9:22 ` [PATCH v4 04/17] dump: Rework get_start_block Janosch Frank
2022-07-26 11:37 ` Marc-André Lureau
2022-07-27 18:42 ` Janis Schoetterl-Glausch
2022-07-28 17:52 ` Steffen Eiden
2022-07-26 9:22 ` [PATCH v4 05/17] dump: Cleanup and annotate guest memory related DumpState struct members Janosch Frank
2022-07-26 11:31 ` Marc-André Lureau
2022-07-29 18:33 ` Janis Schoetterl-Glausch
2022-07-26 9:22 ` [PATCH v4 06/17] dump: Rework dump_calculate_size function Janosch Frank
2022-07-26 11:36 ` Marc-André Lureau
2022-07-26 9:22 ` [PATCH v4 07/17] dump: Allocate header Janosch Frank
2022-07-29 18:31 ` Janis Schoetterl-Glausch
2022-07-26 9:22 ` [PATCH v4 08/17] dump: Split write of section headers and data and add a prepare step Janosch Frank
2022-07-29 15:31 ` Janis Schoetterl-Glausch [this message]
2022-07-29 17:16 ` Janis Schoetterl-Glausch
2022-08-01 7:53 ` Janosch Frank
2022-07-26 9:22 ` [PATCH v4 09/17] dump: Reorder struct DumpState Janosch Frank
2022-07-26 11:04 ` Marc-André Lureau
2022-07-29 17:21 ` Janis Schoetterl-Glausch
2022-08-01 7:55 ` Janosch Frank
2022-07-26 9:22 ` [PATCH v4 10/17] dump: Swap segment and section header locations Janosch Frank
2022-07-26 11:06 ` Marc-André Lureau
2022-07-29 18:56 ` Janis Schoetterl-Glausch
2022-07-26 9:22 ` [PATCH v4 11/17] dump/dump: Add section string table support Janosch Frank
2022-07-26 11:25 ` Marc-André Lureau
2022-07-26 12:53 ` Janosch Frank
2022-07-26 13:12 ` Marc-André Lureau
2022-07-26 14:26 ` Janosch Frank
2022-07-28 13:41 ` Marc-André Lureau
2022-08-01 9:26 ` Janosch Frank
2022-07-29 19:35 ` Janis Schoetterl-Glausch
2022-08-01 14:25 ` Janosch Frank
2022-07-26 9:22 ` [PATCH v4 12/17] dump/dump: Add arch section support Janosch Frank
2022-07-26 11:30 ` Marc-André Lureau
2022-07-28 7:34 ` Janosch Frank
2022-07-28 9:49 ` Marc-André Lureau
2022-07-26 9:22 ` [PATCH v4 13/17] linux header sync Janosch Frank
2022-07-26 11:03 ` Marc-André Lureau
2022-07-26 9:22 ` [PATCH v4 14/17] s390x: Add protected dump cap Janosch Frank
2022-07-26 9:22 ` [PATCH v4 15/17] s390x: Introduce PV query interface Janosch Frank
2022-07-26 9:22 ` [PATCH v4 16/17] s390x: Add KVM PV dump interface Janosch Frank
2022-07-26 9:22 ` [PATCH v4 17/17] s390x: pv: Add dump support Janosch Frank
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=b75c4839-f9d3-ace8-7dbf-ef3fe840fa54@linux.ibm.com \
--to=scgl@linux.ibm.com \
--cc=borntraeger@linux.ibm.com \
--cc=cohuck@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=marcandre.lureau@redhat.com \
--cc=mhartmay@linux.ibm.com \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=seiden@linux.ibm.com \
--cc=thuth@redhat.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.