All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Young <dyoung@redhat.com>
To: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.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: Tue, 5 Jul 2016 08:55:37 +0800	[thread overview]
Message-ID: <20160705005537.GA8190@dhcp-128-65.nay.redhat.com> (raw)
In-Reply-To: <1923446.CtvhM7vr7E@hactar>

On 07/01/16 at 05:31pm, Thiago Jung Bauermann wrote:
> Am Freitag, 01 Juli 2016, 17:02:23 schrieb Thiago Jung Bauermann:
> > Am Freitag, 01 Juli 2016, 14:36:02 schrieb Dave Young:
> > > On 07/01/16 at 02:51pm, Thiago Jung Bauermann wrote:
> > > > 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:
> > > > 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.
> > > 
> > > I still feel it should be changed if more callbacks being introduced,
> > > though you can regard it is internal api, like above comment we do not
> > > need to assign them seperately, the member values can be assigned
> > > from the beginning.
> > 
> > Ok, I'll implement the changes and submit a v4. Thanks for your review.
> 
> Sorry for creating more email traffic, but it'll be better if I ask this 
> before I change all other places in the code. Is the code below what you
> have in mind?

Thanks for the update, almost except a nitpick :)

> 
> In particular, this version doesn't do the memset(&buf, 0, sizeof(buf))
> that the previous code I sent earlier did. Is that ok?
> 
> @@ -643,13 +632,14 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  				  unsigned long max, int top_down)
>  {
>  	struct purgatory_info *pi = &image->purgatory_info;
> -	unsigned long align, buf_align, bss_align, buf_sz, bss_sz, bss_pad;
> -	unsigned long memsz, entry, load_addr, curr_load_addr, bss_addr, offset;
> +	unsigned long align, bss_align, bss_sz, bss_pad;
> +	unsigned long entry, load_addr, curr_load_addr, bss_addr, offset;
>  	unsigned char *buf_addr, *src;
>  	int i, ret = 0, entry_sidx = -1;
>  	const Elf_Shdr *sechdrs_c;
>  	Elf_Shdr *sechdrs = NULL;
> -	void *purgatory_buf = NULL;
> +	struct kexec_buf buf = { .image = image, .buf_min = min,
> +				.buf_max = max, .top_down = top_down };
>  
>  	/*
>  	 * sechdrs_c points to section headers in purgatory and are read
> @@ -715,9 +705,9 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  	}
>  
>  	/* Determine how much memory is needed to load relocatable object. */
> -	buf_align = 1;
> +	buf.buf_align = 1;
>  	bss_align = 1;
> -	buf_sz = 0;
> +	buf.bufsz = 0;
>  	bss_sz = 0;

Above chunk can go to the initializatioin of struct kexec buf ealier.

>  
>  	for (i = 0; i < pi->ehdr->e_shnum; i++) {
> @@ -726,10 +716,10 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  
>  		align = sechdrs[i].sh_addralign;
>  		if (sechdrs[i].sh_type != SHT_NOBITS) {
> -			if (buf_align < align)
> -				buf_align = align;
> -			buf_sz = ALIGN(buf_sz, align);
> -			buf_sz += sechdrs[i].sh_size;
> +			if (buf.buf_align < align)
> +				buf.buf_align = align;
> +			buf.bufsz = ALIGN(buf.bufsz, align);
> +			buf.bufsz += sechdrs[i].sh_size;
>  		} else {
>  			/* bss section */
>  			if (bss_align < align)
> @@ -741,32 +731,31 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  
>  	/* Determine the bss padding required to align bss properly */
>  	bss_pad = 0;
> -	if (buf_sz & (bss_align - 1))
> -		bss_pad = bss_align - (buf_sz & (bss_align - 1));
> +	if (buf.bufsz & (bss_align - 1))
> +		bss_pad = bss_align - (buf.bufsz & (bss_align - 1));
>  
> -	memsz = buf_sz + bss_pad + bss_sz;
> +	buf.memsz = buf.bufsz + bss_pad + bss_sz;
>  
>  	/* Allocate buffer for purgatory */
> -	purgatory_buf = vzalloc(buf_sz);
> -	if (!purgatory_buf) {
> +	buf.buffer = vzalloc(buf.bufsz);
> +	if (!buf.buffer) {
>  		ret = -ENOMEM;
>  		goto out;
>  	}
>  
> -	if (buf_align < bss_align)
> -		buf_align = bss_align;
> +	if (buf.buf_align < bss_align)
> +		buf.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);
> +	ret = kexec_add_buffer(&buf);
>  	if (ret)
>  		goto out;
> +	pi->purgatory_load_addr = buf.mem;
>  
>  	/* Load SHF_ALLOC sections */
> -	buf_addr = purgatory_buf;
> +	buf_addr = buf.buffer;
>  	load_addr = curr_load_addr = pi->purgatory_load_addr;
> -	bss_addr = load_addr + buf_sz + bss_pad;
> +	bss_addr = load_addr + buf.bufsz + bss_pad;
>  
>  	for (i = 0; i < pi->ehdr->e_shnum; i++) {
>  		if (!(sechdrs[i].sh_flags & SHF_ALLOC))
> @@ -812,11 +801,11 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  	 * Used later to identify which section is purgatory and skip it
>  	 * from checksumming.
>  	 */
> -	pi->purgatory_buf = purgatory_buf;
> +	pi->purgatory_buf = buf.buffer;
>  	return ret;
>  out:
>  	vfree(sechdrs);
> -	vfree(purgatory_buf);
> +	vfree(buf.buffer);
>  	return ret;
>  }
>  
> 
> []'s
> Thiago Jung Bauermann
> IBM Linux Technology Center
> 

WARNING: multiple messages have this Message-ID (diff)
From: Dave Young <dyoung@redhat.com>
To: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.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: Tue, 5 Jul 2016 08:55:37 +0800	[thread overview]
Message-ID: <20160705005537.GA8190@dhcp-128-65.nay.redhat.com> (raw)
In-Reply-To: <1923446.CtvhM7vr7E@hactar>

On 07/01/16 at 05:31pm, Thiago Jung Bauermann wrote:
> Am Freitag, 01 Juli 2016, 17:02:23 schrieb Thiago Jung Bauermann:
> > Am Freitag, 01 Juli 2016, 14:36:02 schrieb Dave Young:
> > > On 07/01/16 at 02:51pm, Thiago Jung Bauermann wrote:
> > > > 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:
> > > > 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.
> > > 
> > > I still feel it should be changed if more callbacks being introduced,
> > > though you can regard it is internal api, like above comment we do not
> > > need to assign them seperately, the member values can be assigned
> > > from the beginning.
> > 
> > Ok, I'll implement the changes and submit a v4. Thanks for your review.
> 
> Sorry for creating more email traffic, but it'll be better if I ask this 
> before I change all other places in the code. Is the code below what you
> have in mind?

Thanks for the update, almost except a nitpick :)

> 
> In particular, this version doesn't do the memset(&buf, 0, sizeof(buf))
> that the previous code I sent earlier did. Is that ok?
> 
> @@ -643,13 +632,14 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  				  unsigned long max, int top_down)
>  {
>  	struct purgatory_info *pi = &image->purgatory_info;
> -	unsigned long align, buf_align, bss_align, buf_sz, bss_sz, bss_pad;
> -	unsigned long memsz, entry, load_addr, curr_load_addr, bss_addr, offset;
> +	unsigned long align, bss_align, bss_sz, bss_pad;
> +	unsigned long entry, load_addr, curr_load_addr, bss_addr, offset;
>  	unsigned char *buf_addr, *src;
>  	int i, ret = 0, entry_sidx = -1;
>  	const Elf_Shdr *sechdrs_c;
>  	Elf_Shdr *sechdrs = NULL;
> -	void *purgatory_buf = NULL;
> +	struct kexec_buf buf = { .image = image, .buf_min = min,
> +				.buf_max = max, .top_down = top_down };
>  
>  	/*
>  	 * sechdrs_c points to section headers in purgatory and are read
> @@ -715,9 +705,9 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  	}
>  
>  	/* Determine how much memory is needed to load relocatable object. */
> -	buf_align = 1;
> +	buf.buf_align = 1;
>  	bss_align = 1;
> -	buf_sz = 0;
> +	buf.bufsz = 0;
>  	bss_sz = 0;

Above chunk can go to the initializatioin of struct kexec buf ealier.

>  
>  	for (i = 0; i < pi->ehdr->e_shnum; i++) {
> @@ -726,10 +716,10 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  
>  		align = sechdrs[i].sh_addralign;
>  		if (sechdrs[i].sh_type != SHT_NOBITS) {
> -			if (buf_align < align)
> -				buf_align = align;
> -			buf_sz = ALIGN(buf_sz, align);
> -			buf_sz += sechdrs[i].sh_size;
> +			if (buf.buf_align < align)
> +				buf.buf_align = align;
> +			buf.bufsz = ALIGN(buf.bufsz, align);
> +			buf.bufsz += sechdrs[i].sh_size;
>  		} else {
>  			/* bss section */
>  			if (bss_align < align)
> @@ -741,32 +731,31 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  
>  	/* Determine the bss padding required to align bss properly */
>  	bss_pad = 0;
> -	if (buf_sz & (bss_align - 1))
> -		bss_pad = bss_align - (buf_sz & (bss_align - 1));
> +	if (buf.bufsz & (bss_align - 1))
> +		bss_pad = bss_align - (buf.bufsz & (bss_align - 1));
>  
> -	memsz = buf_sz + bss_pad + bss_sz;
> +	buf.memsz = buf.bufsz + bss_pad + bss_sz;
>  
>  	/* Allocate buffer for purgatory */
> -	purgatory_buf = vzalloc(buf_sz);
> -	if (!purgatory_buf) {
> +	buf.buffer = vzalloc(buf.bufsz);
> +	if (!buf.buffer) {
>  		ret = -ENOMEM;
>  		goto out;
>  	}
>  
> -	if (buf_align < bss_align)
> -		buf_align = bss_align;
> +	if (buf.buf_align < bss_align)
> +		buf.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);
> +	ret = kexec_add_buffer(&buf);
>  	if (ret)
>  		goto out;
> +	pi->purgatory_load_addr = buf.mem;
>  
>  	/* Load SHF_ALLOC sections */
> -	buf_addr = purgatory_buf;
> +	buf_addr = buf.buffer;
>  	load_addr = curr_load_addr = pi->purgatory_load_addr;
> -	bss_addr = load_addr + buf_sz + bss_pad;
> +	bss_addr = load_addr + buf.bufsz + bss_pad;
>  
>  	for (i = 0; i < pi->ehdr->e_shnum; i++) {
>  		if (!(sechdrs[i].sh_flags & SHF_ALLOC))
> @@ -812,11 +801,11 @@ static int __kexec_load_purgatory(struct kimage *image, unsigned long min,
>  	 * Used later to identify which section is purgatory and skip it
>  	 * from checksumming.
>  	 */
> -	pi->purgatory_buf = purgatory_buf;
> +	pi->purgatory_buf = buf.buffer;
>  	return ret;
>  out:
>  	vfree(sechdrs);
> -	vfree(purgatory_buf);
> +	vfree(buf.buffer);
>  	return ret;
>  }
>  
> 
> []'s
> Thiago Jung Bauermann
> IBM Linux Technology Center
> 

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

  reply	other threads:[~2016-07-05  0:55 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
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 [this message]
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=20160705005537.GA8190@dhcp-128-65.nay.redhat.com \
    --to=dyoung@redhat.com \
    --cc=bauerman@linux.vnet.ibm.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.