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

Submitted by Rob Herring on June 28, 2012, 1:54 p.m.

Details

Message ID 1340891651-17618-2-git-send-email-robherring2@gmail.com
State Accepted
Delegated to: Albert ARIBAUD
Headers show

Commit Message

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(-)

Comments

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 hide | download patch | download mbox

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);
 }