Patchwork [U-Boot,2/2] ARM: increase lmb stack space reservation to 4KB

login
register
mail settings
Submitter Rob Herring
Date June 28, 2012, 1:54 p.m.
Message ID <1340891651-17618-2-git-send-email-robherring2@gmail.com>
Download mbox | patch
Permalink /patch/167879/
State Accepted
Delegated to: Albert ARIBAUD
Headers show

Comments

Rob Herring - June 28, 2012, 1:54 p.m.
From: Rob Herring <rob.herring@calxeda.com>

The bootm initrd image copy to ram can collide with the stack in cases
where the print buffer size is large (i.e. 1K). The result is intermittent
initrd decompression errors depending on the initrd size MOD 4KB since
the initrd start address is 4KB aligned.

Cc: Albert ARIBAUD <albert.u.boot@aribaud.net>
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
---
 arch/arm/lib/bootm.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Rob Herring - Aug. 17, 2012, 3:41 p.m.
Albert,

On 06/28/2012 08:54 AM, Rob Herring wrote:
> From: Rob Herring <rob.herring@calxeda.com>
> 
> The bootm initrd image copy to ram can collide with the stack in cases
> where the print buffer size is large (i.e. 1K). The result is intermittent
> initrd decompression errors depending on the initrd size MOD 4KB since
> the initrd start address is 4KB aligned.
> 
> Cc: Albert ARIBAUD <albert.u.boot@aribaud.net>
> Signed-off-by: Rob Herring <rob.herring@calxeda.com>
> ---

Can you please apply this fix. I've seen other issues posted that appear
to be the same cause and this same issue was fixed on PPC ~2 years ago.

Rob

>  arch/arm/lib/bootm.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
> index 599547d..999f201 100644
> --- a/arch/arm/lib/bootm.c
> +++ b/arch/arm/lib/bootm.c
> @@ -69,8 +69,8 @@ void arch_lmb_reserve(struct lmb *lmb)
>  	sp = get_sp();
>  	debug("## Current stack ends at 0x%08lx ", sp);
>  
> -	/* adjust sp by 1K to be safe */
> -	sp -= 1024;
> +	/* adjust sp by 4K to be safe */
> +	sp -= 4096;
>  	lmb_reserve(lmb, sp,
>  		    gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size - sp);
>  }
>
Albert ARIBAUD - Oct. 4, 2012, 8:36 a.m.
Hi Rob,

On Thu, 28 Jun 2012 08:54:11 -0500, Rob Herring <robherring2@gmail.com>
wrote:

> From: Rob Herring <rob.herring@calxeda.com>
> 
> The bootm initrd image copy to ram can collide with the stack in cases
> where the print buffer size is large (i.e. 1K). The result is intermittent
> initrd decompression errors depending on the initrd size MOD 4KB since
> the initrd start address is 4KB aligned.
> 
> Cc: Albert ARIBAUD <albert.u.boot@aribaud.net>
> Signed-off-by: Rob Herring <rob.herring@calxeda.com>
> ---
>  arch/arm/lib/bootm.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
> index 599547d..999f201 100644
> --- a/arch/arm/lib/bootm.c
> +++ b/arch/arm/lib/bootm.c
> @@ -69,8 +69,8 @@ void arch_lmb_reserve(struct lmb *lmb)
>  	sp = get_sp();
>  	debug("## Current stack ends at 0x%08lx ", sp);
>  
> -	/* adjust sp by 1K to be safe */
> -	sp -= 1024;
> +	/* adjust sp by 4K to be safe */
> +	sp -= 4096;
>  	lmb_reserve(lmb, sp,
>  		    gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size - sp);
>  }

Applied to u-boot-arm/master, thanks!

Amicalement,

Patch

diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index 599547d..999f201 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -69,8 +69,8 @@  void arch_lmb_reserve(struct lmb *lmb)
 	sp = get_sp();
 	debug("## Current stack ends at 0x%08lx ", sp);
 
-	/* adjust sp by 1K to be safe */
-	sp -= 1024;
+	/* adjust sp by 4K to be safe */
+	sp -= 4096;
 	lmb_reserve(lmb, sp,
 		    gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size - sp);
 }