From: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com>
To: Dave Young <dyoung@redhat.com>
Cc: linuxppc-dev@lists.ozlabs.org, kexec@lists.infradead.org,
linux-kernel@vger.kernel.org,
Eric Biederman <ebiederm@xmission.com>
Subject: Re: [PATCH v3 2/9] kexec_file: Generalize kexec_add_buffer.
Date: Fri, 01 Jul 2016 14:51:16 -0300 [thread overview]
Message-ID: <3713936.n8FBhAAd79@hactar> (raw)
In-Reply-To: <20160630214357.GB4187@dhcp-128-65.nay.redhat.com>
Am Donnerstag, 30 Juni 2016, 17:43:57 schrieb Dave Young:
> On 06/30/16 at 01:42pm, Thiago Jung Bauermann wrote:
> > Am Donnerstag, 30 Juni 2016, 12:49:44 schrieb Thiago Jung Bauermann:
> > > To be honest I think struct kexec_buf is an implementation detail
> > > inside
> > > kexec_locate_mem_hole, made necessary because the callback functions
> > > it
> > > uses need to access its arguments. Callers of kexec_locate_mem_hole,
> > > kexec_add_handover_buffer and kexec_add_buffer shouldn't need to know
> > > it
> > > exists.
> >
> > Elaborating a bit more: the argument list for these three functions are
> > equal or similar because kexec_add_handover_buffer uses
> > kexec_add_buffer,
> > which uses kexec_locate_mem_hole.
> >
> > It could be beneficial to have a struct to collect the arguments to
> > these
> > functions if someone using one of them would be likely to use another
> > one
> > with the same arguments. In that case, you set up kexec_buf once and
> > then
> > just pass it whenever you need to call one of those functions.
> >
> > But that is unlikely to happen. A user of the kexec API will need to use
> > only one of these functions with a given set of arguments, so they don't
> > gain anything by setting up a struct.
> >
> > Syntactically, I also don't think it's clearer to set struct members
> > instead of simply passing arguments to a function, even if the argument
> > list is long.
>
> Sorry, I'm not sure I get your points but the long argument list really
> looks ugly, since you are introducing more callbacks I still think a
> cleanup is necessary.
>
> kexec_buffer struct is pretty fine to be a abstract of all these buffers.
What I understood from what you said is that making the following change
results in code that is easier to understand:
@@ -650,6 +639,7 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
const Elf_Shdr *sechdrs_c;
Elf_Shdr *sechdrs = NULL;
void *purgatory_buf = NULL;
+ struct kexec_buf buf;
/*
* sechdrs_c points to section headers in purgatory and are read
@@ -757,11 +747,19 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
buf_align = bss_align;
/* Add buffer to segment list */
- ret = kexec_add_buffer(image, purgatory_buf, buf_sz, memsz,
- buf_align, min, max, top_down,
- &pi->purgatory_load_addr);
+ memset(&buf, 0, sizeof(struct kexec_buf));
+ buf.image = image;
+ buf.buffer = purgatory_buf;
+ buf.bufsz = buf_sz,
+ buf.memsz = memsz;
+ buf.buf_align = buf_align;
+ buf.buf_min = min;
+ buf.buf_max = max;
+ buf.top_down = top_down;
+ ret = kexec_add_buffer(&buf);
if (ret)
goto out;
+ pi->purgatory_load_addr = buf.mem;
/* Load SHF_ALLOC sections */
buf_addr = purgatory_buf;
There are 9 calls to kexec_add_buffer in the kernel (including arch/x86,
arch/powerpc/ and kernel/), plus 1 to kexec_locate_mem_hole
and 1 to kexec_add_handover_buffer, so there would be 11 places in
the code settings up kexec_buf. My opinion is that this change doesn't
improve code readability.
Also, I think that kexec_buf abstracts something that, from the
perspective of the user of the kexec API, lives only for the duration
of a single call to either of kexec_add_buffer, kexec_locate_mem_hole,
or kexec_add_handover_buffer. Because of this, there's no need from the
perspective of the API user to initialize this "object", so this just
adds to their cognitive load without any benefit to them.
I understand that this is all somewhat subjective, so if you still disagree
with my points I can provide a patch set implementing the change above.
[]'s
Thiago Jung Bauermann
IBM Linux Technology Center
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com>
To: Dave Young <dyoung@redhat.com>
Cc: kexec@lists.infradead.org, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org,
Eric Biederman <ebiederm@xmission.com>
Subject: Re: [PATCH v3 2/9] kexec_file: Generalize kexec_add_buffer.
Date: Fri, 01 Jul 2016 14:51:16 -0300 [thread overview]
Message-ID: <3713936.n8FBhAAd79@hactar> (raw)
In-Reply-To: <20160630214357.GB4187@dhcp-128-65.nay.redhat.com>
Am Donnerstag, 30 Juni 2016, 17:43:57 schrieb Dave Young:
> On 06/30/16 at 01:42pm, Thiago Jung Bauermann wrote:
> > Am Donnerstag, 30 Juni 2016, 12:49:44 schrieb Thiago Jung Bauermann:
> > > To be honest I think struct kexec_buf is an implementation detail
> > > inside
> > > kexec_locate_mem_hole, made necessary because the callback functions
> > > it
> > > uses need to access its arguments. Callers of kexec_locate_mem_hole,
> > > kexec_add_handover_buffer and kexec_add_buffer shouldn't need to know
> > > it
> > > exists.
> >
> > Elaborating a bit more: the argument list for these three functions are
> > equal or similar because kexec_add_handover_buffer uses
> > kexec_add_buffer,
> > which uses kexec_locate_mem_hole.
> >
> > It could be beneficial to have a struct to collect the arguments to
> > these
> > functions if someone using one of them would be likely to use another
> > one
> > with the same arguments. In that case, you set up kexec_buf once and
> > then
> > just pass it whenever you need to call one of those functions.
> >
> > But that is unlikely to happen. A user of the kexec API will need to use
> > only one of these functions with a given set of arguments, so they don't
> > gain anything by setting up a struct.
> >
> > Syntactically, I also don't think it's clearer to set struct members
> > instead of simply passing arguments to a function, even if the argument
> > list is long.
>
> Sorry, I'm not sure I get your points but the long argument list really
> looks ugly, since you are introducing more callbacks I still think a
> cleanup is necessary.
>
> kexec_buffer struct is pretty fine to be a abstract of all these buffers.
What I understood from what you said is that making the following change
results in code that is easier to understand:
@@ -650,6 +639,7 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
const Elf_Shdr *sechdrs_c;
Elf_Shdr *sechdrs = NULL;
void *purgatory_buf = NULL;
+ struct kexec_buf buf;
/*
* sechdrs_c points to section headers in purgatory and are read
@@ -757,11 +747,19 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
buf_align = bss_align;
/* Add buffer to segment list */
- ret = kexec_add_buffer(image, purgatory_buf, buf_sz, memsz,
- buf_align, min, max, top_down,
- &pi->purgatory_load_addr);
+ memset(&buf, 0, sizeof(struct kexec_buf));
+ buf.image = image;
+ buf.buffer = purgatory_buf;
+ buf.bufsz = buf_sz,
+ buf.memsz = memsz;
+ buf.buf_align = buf_align;
+ buf.buf_min = min;
+ buf.buf_max = max;
+ buf.top_down = top_down;
+ ret = kexec_add_buffer(&buf);
if (ret)
goto out;
+ pi->purgatory_load_addr = buf.mem;
/* Load SHF_ALLOC sections */
buf_addr = purgatory_buf;
There are 9 calls to kexec_add_buffer in the kernel (including arch/x86,
arch/powerpc/ and kernel/), plus 1 to kexec_locate_mem_hole
and 1 to kexec_add_handover_buffer, so there would be 11 places in
the code settings up kexec_buf. My opinion is that this change doesn't
improve code readability.
Also, I think that kexec_buf abstracts something that, from the
perspective of the user of the kexec API, lives only for the duration
of a single call to either of kexec_add_buffer, kexec_locate_mem_hole,
or kexec_add_handover_buffer. Because of this, there's no need from the
perspective of the API user to initialize this "object", so this just
adds to their cognitive load without any benefit to them.
I understand that this is all somewhat subjective, so if you still disagree
with my points I can provide a patch set implementing the change above.
[]'s
Thiago Jung Bauermann
IBM Linux Technology Center
next prev parent reply other threads:[~2016-07-01 17:51 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-21 19:48 [PATCH v3 0/9] kexec_file_load implementation for PowerPC Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-21 19:48 ` [PATCH v3 1/9] kexec_file: Remove unused members from struct kexec_buf Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-21 19:48 ` [PATCH v3 2/9] kexec_file: Generalize kexec_add_buffer Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-22 10:20 ` Dave Young
2016-06-22 10:20 ` Dave Young
2016-06-22 23:30 ` Thiago Jung Bauermann
2016-06-22 23:30 ` Thiago Jung Bauermann
2016-06-23 2:25 ` Dave Young
2016-06-23 2:25 ` Dave Young
2016-06-28 22:18 ` Thiago Jung Bauermann
2016-06-28 22:18 ` Thiago Jung Bauermann
2016-06-29 19:47 ` Dave Young
2016-06-29 19:47 ` Dave Young
2016-06-29 21:18 ` Thiago Jung Bauermann
2016-06-29 21:18 ` Thiago Jung Bauermann
2016-06-30 15:07 ` Dave Young
2016-06-30 15:07 ` Dave Young
2016-06-30 15:49 ` Thiago Jung Bauermann
2016-06-30 15:49 ` Thiago Jung Bauermann
2016-06-30 16:42 ` Thiago Jung Bauermann
2016-06-30 16:42 ` Thiago Jung Bauermann
2016-06-30 21:43 ` Dave Young
2016-06-30 21:43 ` Dave Young
2016-07-01 17:51 ` Thiago Jung Bauermann [this message]
2016-07-01 17:51 ` Thiago Jung Bauermann
2016-07-01 18:36 ` Dave Young
2016-07-01 18:36 ` Dave Young
2016-07-01 20:02 ` Thiago Jung Bauermann
2016-07-01 20:02 ` Thiago Jung Bauermann
2016-07-01 20:31 ` Thiago Jung Bauermann
2016-07-01 20:31 ` Thiago Jung Bauermann
2016-07-05 0:55 ` Dave Young
2016-07-05 0:55 ` Dave Young
2016-06-21 19:48 ` [PATCH v3 3/9] kexec_file: Factor out kexec_locate_mem_hole from kexec_add_buffer Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-22 10:18 ` Dave Young
2016-06-22 10:18 ` Dave Young
2016-06-22 23:34 ` Thiago Jung Bauermann
2016-06-22 23:34 ` Thiago Jung Bauermann
2016-06-23 2:30 ` Dave Young
2016-06-23 2:30 ` Dave Young
2016-06-23 5:44 ` Dave Young
2016-06-23 5:44 ` Dave Young
2016-06-23 15:37 ` Thiago Jung Bauermann
2016-06-23 15:37 ` Thiago Jung Bauermann
2016-06-27 16:19 ` Dave Young
2016-06-27 16:19 ` Dave Young
2016-06-27 16:37 ` Thiago Jung Bauermann
2016-06-27 16:37 ` Thiago Jung Bauermann
2016-06-27 16:51 ` Thiago Jung Bauermann
2016-06-27 16:51 ` Thiago Jung Bauermann
2016-06-27 20:21 ` Dave Young
2016-06-27 20:21 ` Dave Young
2016-06-28 19:20 ` Dave Young
2016-06-28 19:20 ` Dave Young
2016-06-28 22:18 ` Thiago Jung Bauermann
2016-06-28 22:18 ` Thiago Jung Bauermann
2016-06-29 19:45 ` Dave Young
2016-06-29 19:45 ` Dave Young
2016-06-29 21:09 ` Thiago Jung Bauermann
2016-06-29 21:09 ` Thiago Jung Bauermann
2016-06-30 15:41 ` Dave Young
2016-06-30 15:41 ` Dave Young
2016-06-30 16:08 ` Thiago Jung Bauermann
2016-06-30 16:08 ` Thiago Jung Bauermann
2016-06-30 21:37 ` Dave Young
2016-06-30 21:37 ` Dave Young
2016-06-21 19:48 ` [PATCH v3 4/9] powerpc: Factor out relocation code from module_64.c to elf_util_64.c Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-21 19:48 ` [PATCH v3 5/9] powerpc: Generalize elf64_apply_relocate_add Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-21 19:48 ` [PATCH v3 6/9] powerpc: Add functions to read ELF files of any endianness Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-21 19:48 ` [PATCH v3 7/9] powerpc: Implement kexec_file_load Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-21 19:48 ` [PATCH v3 8/9] powerpc: Add support for loading ELF kernels with kexec_file_load Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-21 19:48 ` [PATCH v3 9/9] powerpc: Add purgatory for kexec_file_load implementation Thiago Jung Bauermann
2016-06-21 19:48 ` Thiago Jung Bauermann
2016-06-22 13:29 ` [PATCH v3 0/9] kexec_file_load implementation for PowerPC Balbir Singh
2016-06-22 13:29 ` Balbir Singh
2016-06-22 17:02 ` Thiago Jung Bauermann
2016-06-22 17:02 ` Thiago Jung Bauermann
2016-06-22 23:57 ` Balbir Singh
2016-06-22 23:57 ` Balbir Singh
2016-06-23 16:44 ` Thiago Jung Bauermann
2016-06-23 16:44 ` Thiago Jung Bauermann
2016-06-23 22:33 ` Balbir Singh
2016-06-23 22:33 ` Balbir Singh
2016-06-23 23:49 ` Thiago Jung Bauermann
2016-06-23 23:49 ` Thiago Jung Bauermann
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=3713936.n8FBhAAd79@hactar \
--to=bauerman@linux.vnet.ibm.com \
--cc=dyoung@redhat.com \
--cc=ebiederm@xmission.com \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.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 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.