2019-04-30 10:44:02

by Arun KS

[permalink] [raw]
Subject: arm64: Fix size of __early_cpu_boot_status

__early_cpu_boot_status is of type long. Use quad
assembler directive to allocate proper size.

Signed-off-by: Arun KS <[email protected]>
---
arch/arm64/kernel/head.S | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index eecf792..115f332 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -684,7 +684,7 @@ ENTRY(__boot_cpu_mode)
* with MMU turned off.
*/
ENTRY(__early_cpu_boot_status)
- .long 0
+ .quad 0

.popsection

--
1.9.1


2019-04-30 11:09:10

by Will Deacon

[permalink] [raw]
Subject: Re: arm64: Fix size of __early_cpu_boot_status

On Tue, Apr 30, 2019 at 04:05:04PM +0530, Arun KS wrote:
> __early_cpu_boot_status is of type long. Use quad
> assembler directive to allocate proper size.
>
> Signed-off-by: Arun KS <[email protected]>
> ---
> arch/arm64/kernel/head.S | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
> index eecf792..115f332 100644
> --- a/arch/arm64/kernel/head.S
> +++ b/arch/arm64/kernel/head.S
> @@ -684,7 +684,7 @@ ENTRY(__boot_cpu_mode)
> * with MMU turned off.
> */
> ENTRY(__early_cpu_boot_status)
> - .long 0
> + .quad 0

Yikes. How did you spot this? Did we end up corrupting an adjacent variable,
or does the alignment in the linker script save us in practice?

Will

2019-05-01 05:00:03

by Arun KS

[permalink] [raw]
Subject: Re: arm64: Fix size of __early_cpu_boot_status

On Tue, Apr 30, 2019 at 4:39 PM Will Deacon <[email protected]> wrote:
>
> On Tue, Apr 30, 2019 at 04:05:04PM +0530, Arun KS wrote:
> > __early_cpu_boot_status is of type long. Use quad
> > assembler directive to allocate proper size.
> >
> > Signed-off-by: Arun KS <[email protected]>
> > ---
> > arch/arm64/kernel/head.S | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
> > index eecf792..115f332 100644
> > --- a/arch/arm64/kernel/head.S
> > +++ b/arch/arm64/kernel/head.S
> > @@ -684,7 +684,7 @@ ENTRY(__boot_cpu_mode)
> > * with MMU turned off.
> > */
> > ENTRY(__early_cpu_boot_status)
> > - .long 0
> > + .quad 0
>
> Yikes. How did you spot this? Did we end up corrupting an adjacent variable,
> or does the alignment in the linker script save us in practice?

Rite now there is no adjacent variable. But I was adding one and it
was getting corrupted.

Regards,
Arun
>
> Will

2019-05-01 11:02:25

by Mark Rutland

[permalink] [raw]
Subject: Re: arm64: Fix size of __early_cpu_boot_status

On Tue, Apr 30, 2019 at 04:05:04PM +0530, Arun KS wrote:
> __early_cpu_boot_status is of type long. Use quad
> assembler directive to allocate proper size.
>
> Signed-off-by: Arun KS <[email protected]>
> ---
> arch/arm64/kernel/head.S | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
> index eecf792..115f332 100644
> --- a/arch/arm64/kernel/head.S
> +++ b/arch/arm64/kernel/head.S
> @@ -684,7 +684,7 @@ ENTRY(__boot_cpu_mode)
> * with MMU turned off.
> */
> ENTRY(__early_cpu_boot_status)
> - .long 0
> + .quad 0

This is the last element in .mmuoff.data.write, which is padded to 2K,
so luckily we don't clobber anything else (and don't need a backport).

For consistency with __boot_cpu_mode, we could instead change the c
declaration to int, and fix up the calls to
update_early_cpu_boot_status, to use a w register, but either way:

Acked-by: Mark Rutland <[email protected]>

Mark.

>
> .popsection
>
> --
> 1.9.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel