2022-07-20 23:53:34

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: manual merge of the arm64 tree with the arm64-fixes tree

Hi all,

Today's linux-next merge of the arm64 tree got a conflict in:

arch/arm64/kernel/head.S

between commit:

f7b4c3b82e7d ("arm64: set UXN on swapper page tables")

from the arm64-fixes tree and commits:

e42ade29e3bc ("arm64: head: split off idmap creation code")
c3cee924bd85 ("arm64: head: cover entire kernel image in initial ID map")

from the arm64 tree.

I didn't know if the change from the former was still needed after the
changes in the latter, so I left it out for now.

I fixed it up (see above) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging. You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

--
Cheers,
Stephen Rothwell


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature

2022-07-21 10:59:54

by Stephen Rothwell

[permalink] [raw]
Subject: Re: linux-next: manual merge of the arm64 tree with the arm64-fixes tree

Hi all,

On Thu, 21 Jul 2022 09:45:12 +1000 Stephen Rothwell <[email protected]> wrote:
>
> Today's linux-next merge of the arm64 tree got a conflict in:
>
> arch/arm64/kernel/head.S
>
> between commit:
>
> f7b4c3b82e7d ("arm64: set UXN on swapper page tables")
>
> from the arm64-fixes tree and commits:
>
> e42ade29e3bc ("arm64: head: split off idmap creation code")
> c3cee924bd85 ("arm64: head: cover entire kernel image in initial ID map")
>
> from the arm64 tree.
>
> I didn't know if the change from the former was still needed after the
> changes in the latter, so I left it out for now.

OK, so my arm64 defconfig build produced these errors:

arch/arm64/kernel/head.S: Assembler messages:
arch/arm64/kernel/head.S:334: Error: immediate cannot be moved by a single instruction
arch/arm64/kernel/head.S:343: Error: immediate cannot be moved by a single instruction
arch/arm64/kernel/head.S:354: Error: immediate cannot be moved by a single instruction
arch/arm64/kernel/head.S:379: Error: immediate cannot be moved by a single instruction
arch/arm64/mm/proc.S:296: Error: immediate cannot be moved by a single instruction

So I tried this patch:

From: Stephen Rothwell <[email protected]>
Date: Thu, 21 Jul 2022 20:21:36 +1000
Subject: [PATCH] fixup for "arm64: set UXN on swapper page tables"

Signed-off-by: Stephen Rothwell <[email protected]>
---
arch/arm64/kernel/head.S | 8 ++++----
arch/arm64/mm/proc.S | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index cefe6a73ee54..aa7c58689f68 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -331,7 +331,7 @@ SYM_FUNC_START_LOCAL(create_idmap)
adrp x0, init_idmap_pg_dir
adrp x3, _text
adrp x6, _end + MAX_FDT_SIZE + SWAPPER_BLOCK_SIZE
- mov x7, SWAPPER_RX_MMUFLAGS
+ mov_q x7, SWAPPER_RX_MMUFLAGS

map_memory x0, x1, x3, x6, x7, x3, IDMAP_PGD_ORDER, x10, x11, x12, x13, x14, EXTRA_SHIFT

@@ -340,7 +340,7 @@ SYM_FUNC_START_LOCAL(create_idmap)
adrp x2, init_pg_dir
adrp x3, init_pg_end
bic x4, x2, #SWAPPER_BLOCK_SIZE - 1
- mov x5, SWAPPER_RW_MMUFLAGS
+ mov_q x5, SWAPPER_RW_MMUFLAGS
mov x6, #SWAPPER_BLOCK_SHIFT
bl remap_region

@@ -351,7 +351,7 @@ SYM_FUNC_START_LOCAL(create_idmap)
bfi x22, x21, #0, #SWAPPER_BLOCK_SHIFT // remapped FDT address
add x3, x2, #MAX_FDT_SIZE + SWAPPER_BLOCK_SIZE
bic x4, x21, #SWAPPER_BLOCK_SIZE - 1
- mov x5, SWAPPER_RW_MMUFLAGS
+ mov_q x5, SWAPPER_RW_MMUFLAGS
mov x6, #SWAPPER_BLOCK_SHIFT
bl remap_region

@@ -376,7 +376,7 @@ SYM_FUNC_START_LOCAL(create_kernel_mapping)
adrp x3, _text // runtime __pa(_text)
sub x6, x6, x3 // _end - _text
add x6, x6, x5 // runtime __va(_end)
- mov x7, SWAPPER_RW_MMUFLAGS
+ mov_q x7, SWAPPER_RW_MMUFLAGS

map_memory x0, x1, x5, x6, x7, x3, (VA_BITS - PGDIR_SHIFT), x10, x11, x12, x13, x14

diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
index 7837a69524c5..b4fe8e6e85cb 100644
--- a/arch/arm64/mm/proc.S
+++ b/arch/arm64/mm/proc.S
@@ -293,7 +293,7 @@ SYM_FUNC_START(idmap_kpti_install_ng_mappings)
isb

mov temp_pte, x5
- mov pte_flags, #KPTI_NG_PTE_FLAGS
+ mov_q pte_flags, #KPTI_NG_PTE_FLAGS

/* Everybody is enjoying the idmap, so we can rewrite swapper. */
/* PGD */
--
2.35.1

Which mostly worked, but produced this:

arch/arm64/mm/proc.S: Assembler messages:
arch/arm64/mm/proc.S:296: Error: bad expression
arch/arm64/mm/proc.S:296: Error: found '(', expected: ')'
arch/arm64/mm/proc.S:296: Error: found '(', expected: ')'
arch/arm64/mm/proc.S:296: Error: found '(', expected: ')'
arch/arm64/mm/proc.S:296: Error: junk at end of line, first unrecognized character is `('
arch/arm64/mm/proc.S:296: Error: bad expression
arch/arm64/mm/proc.S:296: Error: found '(', expected: ')'
arch/arm64/mm/proc.S:296: Error: found '(', expected: ')'
arch/arm64/mm/proc.S:296: Error: found '(', expected: ')'
arch/arm64/mm/proc.S:296: Error: junk at end of line, first unrecognized character is `('
arch/arm64/mm/proc.S:296: Error: bad expression at operand 2 -- `movz pte_flags,:abs_g3:#(((0)<<2)|((3<<0)|(1<<10)|(3<<8)|(1<<54)))'
arch/arm64/mm/proc.S:296: Error: bad expression at operand 2 -- `movk pte_flags,:abs_g2_nc:#(((0)<<2)|((3<<0)|(1<<10)|(3<<8)|(1<<54)))'
arch/arm64/mm/proc.S:296: Error: bad expression at operand 2 -- `movk pte_flags,:abs_g1_nc:#(((0)<<2)|((3<<0)|(1<<10)|(3<<8)|(1<<54)))'
arch/arm64/mm/proc.S:296: Error: bad expression at operand 2 -- `movk pte_flags,:abs_g0_nc:#(((0)<<2)|((3<<0)|(1<<10)|(3<<8)|(1<<54)))'

So I gave up and left arm64 broken for today :-(
--
Cheers,
Stephen Rothwell


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature

2022-07-21 17:04:23

by Will Deacon

[permalink] [raw]
Subject: Re: linux-next: manual merge of the arm64 tree with the arm64-fixes tree

Hi Stephen,

On Thu, Jul 21, 2022 at 08:45:17PM +1000, Stephen Rothwell wrote:
> On Thu, 21 Jul 2022 09:45:12 +1000 Stephen Rothwell <[email protected]> wrote:
> >
> > Today's linux-next merge of the arm64 tree got a conflict in:
> >
> > arch/arm64/kernel/head.S
> >
> > between commit:
> >
> > f7b4c3b82e7d ("arm64: set UXN on swapper page tables")
> >
> > from the arm64-fixes tree and commits:
> >
> > e42ade29e3bc ("arm64: head: split off idmap creation code")
> > c3cee924bd85 ("arm64: head: cover entire kernel image in initial ID map")
> >
> > from the arm64 tree.
> >
> > I didn't know if the change from the former was still needed after the
> > changes in the latter, so I left it out for now.
>
> OK, so my arm64 defconfig build produced these errors:
>
> arch/arm64/kernel/head.S: Assembler messages:
> arch/arm64/kernel/head.S:334: Error: immediate cannot be moved by a single instruction
> arch/arm64/kernel/head.S:343: Error: immediate cannot be moved by a single instruction
> arch/arm64/kernel/head.S:354: Error: immediate cannot be moved by a single instruction
> arch/arm64/kernel/head.S:379: Error: immediate cannot be moved by a single instruction
> arch/arm64/mm/proc.S:296: Error: immediate cannot be moved by a single instruction
>
> So I tried this patch:
>
> From: Stephen Rothwell <[email protected]>
> Date: Thu, 21 Jul 2022 20:21:36 +1000
> Subject: [PATCH] fixup for "arm64: set UXN on swapper page tables"
>
> Signed-off-by: Stephen Rothwell <[email protected]>
> ---
> arch/arm64/kernel/head.S | 8 ++++----
> arch/arm64/mm/proc.S | 2 +-
> 2 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
> index cefe6a73ee54..aa7c58689f68 100644
> --- a/arch/arm64/kernel/head.S
> +++ b/arch/arm64/kernel/head.S
> @@ -331,7 +331,7 @@ SYM_FUNC_START_LOCAL(create_idmap)
> adrp x0, init_idmap_pg_dir
> adrp x3, _text
> adrp x6, _end + MAX_FDT_SIZE + SWAPPER_BLOCK_SIZE
> - mov x7, SWAPPER_RX_MMUFLAGS
> + mov_q x7, SWAPPER_RX_MMUFLAGS

[...]

I think Marc posted something similar here:

https://lore.kernel.org/r/[email protected]

but in further discussion offline (and echoed on that thread), we've decided
to drop f7b4c3b82e7d ("arm64: set UXN on swapper page tables") for now; the
issue it addresses doesn't affect the hardware which is readily available at
the moment so we'll just get it into -stable instead rather than disrupt
everything at this stage in the release cycle.

> So I gave up and left arm64 broken for today :-(

No problem, thank you for trying and hopefully it will be better tomorrow
once we've dropped that commit.

Will