microwatt_defconfig broken: fined reference to `hash__tlb_flush'

6 messages, 2 authors, 2023-02-24 · open the first message on its own page

microwatt_defconfig broken: fined reference to `hash__tlb_flush'

From: Jan-Benedict Glaw <jbglaw@lug-owl.de>
Date: 2023-02-17 17:23:13

Hi!

My CI builds showed that the microwatt_defconfig broke somewhere between
(upstream Linus) 6d796c50f84ca79f1722bb131799e5a5710c4700 (last known good, log
at [1]) and 033c40a89f55525139fd5b6342281b09b97d05bf (first known bad, log at
[2]) with this:

[...]
make V=1 ARCH=powerpc CROSS_COMPILE=powerpc64le-linux- INSTALL_MOD_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig INSTALL_DTBS_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig all
[...]
[mk all 2023-02-17 01:42:27] + powerpc64le-linux-ld -EL -z noexecstack --no-warn-rwx-segments -Bstatic --build-id=sha1 --orphan-handling=warn --script=./arch/powerpc/kernel/vmlinux.lds --strip-debug -o .tmp_vmlinux.kallsyms1 --whole-archive vmlinux.a init/version-timestamp.o --no-whole-archive --start-group lib/lib.a --end-group
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/memory.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] memory.c:(.text+0x320): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mmu_gather.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] mmu_gather.c:(.text+0xe0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mprotect.o: in function `change_protection':
[mk all 2023-02-17 01:42:28] mprotect.c:(.text+0x59c): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/madvise.o: in function `tlb_end_vma.isra.0':
[mk all 2023-02-17 01:42:28] madvise.c:(.text+0x1f0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] make[1]: *** [scripts/Makefile.vmlinux:35: vmlinux] Error 1
[mk all 2023-02-17 01:42:28] make: *** [Makefile:1264: vmlinux] Error 2


It's not yet bisected fully, but I guess it was caused while trying to
fix a missing tlb flush:

commit 1665c027afb225882a5a0b014c45e84290b826c2
Author: Michael Ellerman [off-list ref]
Date:   Tue Jan 31 22:14:07 2023 +1100

    powerpc/64s: Reconnect tlb_flush() to hash__tlb_flush()
    
    Commit baf1ed24b27d ("powerpc/mm: Remove empty hash__ functions")
    removed some empty hash MMU flushing routines, but got a bit overeager
    and also removed the call to hash__tlb_flush() from tlb_flush().
    
    In regular use this doesn't lead to any noticable breakage, which is a
    little concerning. Presumably there are flushes happening via other
    paths such as arch_leave_lazy_mmu_mode(), and/or a bit of luck.
    
    Fix it by reinstating the call to hash__tlb_flush().
    
    Fixes: baf1ed24b27d ("powerpc/mm: Remove empty hash__ functions")
    Signed-off-by: Michael Ellerman [off-list ref]
    Link: https://lore.kernel.org/r/20230131111407.806770-1-mpe@ellerman.id.au

MfG, JBG


[1] http://toolchain.lug-owl.de/laminar/jobs/linux-powerpc-microwatt_defconfig/27
[2] http://toolchain.lug-owl.de/laminar/jobs/linux-powerpc-microwatt_defconfig/28
-- 

Re: microwatt_defconfig broken: fined reference to `hash__tlb_flush'

From: Christophe Leroy <hidden>
Date: 2023-02-17 19:45:53


Le 17/02/2023 à 18:14, Jan-Benedict Glaw a écrit :
Hi!

My CI builds showed that the microwatt_defconfig broke somewhere between
(upstream Linus) 6d796c50f84ca79f1722bb131799e5a5710c4700 (last known good, log
at [1]) and 033c40a89f55525139fd5b6342281b09b97d05bf (first known bad, log at
[2]) with this:

[...]
make V=1 ARCH=powerpc CROSS_COMPILE=powerpc64le-linux- INSTALL_MOD_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig INSTALL_DTBS_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig all
[...]
[mk all 2023-02-17 01:42:27] + powerpc64le-linux-ld -EL -z noexecstack --no-warn-rwx-segments -Bstatic --build-id=sha1 --orphan-handling=warn --script=./arch/powerpc/kernel/vmlinux.lds --strip-debug -o .tmp_vmlinux.kallsyms1 --whole-archive vmlinux.a init/version-timestamp.o --no-whole-archive --start-group lib/lib.a --end-group
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/memory.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] memory.c:(.text+0x320): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mmu_gather.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] mmu_gather.c:(.text+0xe0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mprotect.o: in function `change_protection':
[mk all 2023-02-17 01:42:28] mprotect.c:(.text+0x59c): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/madvise.o: in function `tlb_end_vma.isra.0':
[mk all 2023-02-17 01:42:28] madvise.c:(.text+0x1f0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] make[1]: *** [scripts/Makefile.vmlinux:35: vmlinux] Error 1
[mk all 2023-02-17 01:42:28] make: *** [Makefile:1264: vmlinux] Error 2

The fix is available here : 
https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=4302abc628fc0dc08e5855f21bbfaed407a72bc3


It's not yet bisected fully, but I guess it was caused while trying to
fix a missing tlb flush:

commit 1665c027afb225882a5a0b014c45e84290b826c2
Author: Michael Ellerman [off-list ref]
Date:   Tue Jan 31 22:14:07 2023 +1100

     powerpc/64s: Reconnect tlb_flush() to hash__tlb_flush()
     
     Commit baf1ed24b27d ("powerpc/mm: Remove empty hash__ functions")
     removed some empty hash MMU flushing routines, but got a bit overeager
     and also removed the call to hash__tlb_flush() from tlb_flush().
     
     In regular use this doesn't lead to any noticable breakage, which is a
     little concerning. Presumably there are flushes happening via other
     paths such as arch_leave_lazy_mmu_mode(), and/or a bit of luck.
     
     Fix it by reinstating the call to hash__tlb_flush().
     
     Fixes: baf1ed24b27d ("powerpc/mm: Remove empty hash__ functions")
     Signed-off-by: Michael Ellerman [off-list ref]
     Link: https://lore.kernel.org/r/20230131111407.806770-1-mpe@ellerman.id.au

MfG, JBG


[1] http://toolchain.lug-owl.de/laminar/jobs/linux-powerpc-microwatt_defconfig/27
[2] http://toolchain.lug-owl.de/laminar/jobs/linux-powerpc-microwatt_defconfig/28

Re: microwatt_defconfig broken: fined reference to `hash__tlb_flush'

From: Jan-Benedict Glaw <jbglaw@lug-owl.de>
Date: 2023-02-17 20:01:22

On Fri, 2023-02-17 19:44:27 +0000, Christophe Leroy [off-list ref] wrote:

Le 17/02/2023 à 18:14, Jan-Benedict Glaw a écrit :
quoted
Hi!

My CI builds showed that the microwatt_defconfig broke somewhere between
(upstream Linus) 6d796c50f84ca79f1722bb131799e5a5710c4700 (last known good, log
at [1]) and 033c40a89f55525139fd5b6342281b09b97d05bf (first known bad, log at
[2]) with this:

[...]
make V=1 ARCH=powerpc CROSS_COMPILE=powerpc64le-linux- INSTALL_MOD_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig INSTALL_DTBS_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig all
[...]
[mk all 2023-02-17 01:42:27] + powerpc64le-linux-ld -EL -z noexecstack --no-warn-rwx-segments -Bstatic --build-id=sha1 --orphan-handling=warn --script=./arch/powerpc/kernel/vmlinux.lds --strip-debug -o .tmp_vmlinux.kallsyms1 --whole-archive vmlinux.a init/version-timestamp.o --no-whole-archive --start-group lib/lib.a --end-group
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/memory.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] memory.c:(.text+0x320): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mmu_gather.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] mmu_gather.c:(.text+0xe0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mprotect.o: in function `change_protection':
[mk all 2023-02-17 01:42:28] mprotect.c:(.text+0x59c): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/madvise.o: in function `tlb_end_vma.isra.0':
[mk all 2023-02-17 01:42:28] madvise.c:(.text+0x1f0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] make[1]: *** [scripts/Makefile.vmlinux:35: vmlinux] Error 1
[mk all 2023-02-17 01:42:28] make: *** [Makefile:1264: vmlinux] Error 2

The fix is available here : 
https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=4302abc628fc0dc08e5855f21bbfaed407a72bc3
I can give that patch a try, but on the first glimpse, it won't help:

diff --git a/arch/powerpc/include/asm/book3s/64/tlbflush.h b/arch/powerpc/include/asm/book3s/64/tlbflush.h
index d5cd16270c5d5..2bbc0fcce04a3 100644
--- a/arch/powerpc/include/asm/book3s/64/tlbflush.h
+++ b/arch/powerpc/include/asm/book3s/64/tlbflush.h
@@ -97,8 +97,8 @@ static inline void tlb_flush(struct mmu_gather *tlb)
 {
  if (radix_enabled())
   radix__tlb_flush(tlb);
-
- return hash__tlb_flush(tlb);
+ else
+  hash__tlb_flush(tlb);
 }
 
 #ifdef CONFIG_SMP

The patch handles a return-type issue. My above issue is a linkage
issue, the linker cannot find hash__tlb_flush(). Or am I mistaken?

MfG, JBG

-- 

Re: microwatt_defconfig broken: fined reference to `hash__tlb_flush'

From: Jan-Benedict Glaw <jbglaw@lug-owl.de>
Date: 2023-02-17 20:41:52

Hi Christophe!

On Fri, 2023-02-17 21:00:43 +0100, Jan-Benedict Glaw [off-list ref] wrote:
On Fri, 2023-02-17 19:44:27 +0000, Christophe Leroy [off-list ref] wrote:
quoted
Le 17/02/2023 à 18:14, Jan-Benedict Glaw a écrit :
quoted
My CI builds showed that the microwatt_defconfig broke somewhere between
(upstream Linus) 6d796c50f84ca79f1722bb131799e5a5710c4700 (last known good, log
at [1]) and 033c40a89f55525139fd5b6342281b09b97d05bf (first known bad, log at
[2]) with this:

[...]
make V=1 ARCH=powerpc CROSS_COMPILE=powerpc64le-linux- INSTALL_MOD_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig INSTALL_DTBS_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig all
[...]
[mk all 2023-02-17 01:42:27] + powerpc64le-linux-ld -EL -z noexecstack --no-warn-rwx-segments -Bstatic --build-id=sha1 --orphan-handling=warn --script=./arch/powerpc/kernel/vmlinux.lds --strip-debug -o .tmp_vmlinux.kallsyms1 --whole-archive vmlinux.a init/version-timestamp.o --no-whole-archive --start-group lib/lib.a --end-group
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/memory.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] memory.c:(.text+0x320): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mmu_gather.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] mmu_gather.c:(.text+0xe0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mprotect.o: in function `change_protection':
[mk all 2023-02-17 01:42:28] mprotect.c:(.text+0x59c): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/madvise.o: in function `tlb_end_vma.isra.0':
[mk all 2023-02-17 01:42:28] madvise.c:(.text+0x1f0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] make[1]: *** [scripts/Makefile.vmlinux:35: vmlinux] Error 1
[mk all 2023-02-17 01:42:28] make: *** [Makefile:1264: vmlinux] Error 2

The fix is available here : 
https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=4302abc628fc0dc08e5855f21bbfaed407a72bc3
I can give that patch a try, but on the first glimpse, it won't help:
[...]
The patch handles a return-type issue. My above issue is a linkage
issue, the linker cannot find hash__tlb_flush(). Or am I mistaken?
I stand corrected: That patch fixes the linker issue. (Build log at
http://toolchain.lug-owl.de/laminar/jobs/linux-powerpc-microwatt_defconfig/69)
Just ftr: How does this work?

MfG, JBG

-- 

Re: microwatt_defconfig broken: fined reference to `hash__tlb_flush'

From: Christophe Leroy <hidden>
Date: 2023-02-18 07:26:36

Hi Jan-Benedict,

Le 17/02/2023 à 21:41, Jan-Benedict Glaw a écrit :
Hi Christophe!

On Fri, 2023-02-17 21:00:43 +0100, Jan-Benedict Glaw [off-list ref] wrote:
quoted
On Fri, 2023-02-17 19:44:27 +0000, Christophe Leroy [off-list ref] wrote:
quoted
Le 17/02/2023 à 18:14, Jan-Benedict Glaw a écrit :
quoted
My CI builds showed that the microwatt_defconfig broke somewhere between
(upstream Linus) 6d796c50f84ca79f1722bb131799e5a5710c4700 (last known good, log
at [1]) and 033c40a89f55525139fd5b6342281b09b97d05bf (first known bad, log at
[2]) with this:

[...]
make V=1 ARCH=powerpc CROSS_COMPILE=powerpc64le-linux- INSTALL_MOD_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig INSTALL_DTBS_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig all
[...]
[mk all 2023-02-17 01:42:27] + powerpc64le-linux-ld -EL -z noexecstack --no-warn-rwx-segments -Bstatic --build-id=sha1 --orphan-handling=warn --script=./arch/powerpc/kernel/vmlinux.lds --strip-debug -o .tmp_vmlinux.kallsyms1 --whole-archive vmlinux.a init/version-timestamp.o --no-whole-archive --start-group lib/lib.a --end-group
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/memory.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] memory.c:(.text+0x320): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mmu_gather.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] mmu_gather.c:(.text+0xe0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mprotect.o: in function `change_protection':
[mk all 2023-02-17 01:42:28] mprotect.c:(.text+0x59c): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/madvise.o: in function `tlb_end_vma.isra.0':
[mk all 2023-02-17 01:42:28] madvise.c:(.text+0x1f0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] make[1]: *** [scripts/Makefile.vmlinux:35: vmlinux] Error 1
[mk all 2023-02-17 01:42:28] make: *** [Makefile:1264: vmlinux] Error 2

The fix is available here :
https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=4302abc628fc0dc08e5855f21bbfaed407a72bc3
I can give that patch a try, but on the first glimpse, it won't help:
[...]
quoted
The patch handles a return-type issue. My above issue is a linkage
issue, the linker cannot find hash__tlb_flush(). Or am I mistaken?
I stand corrected: That patch fixes the linker issue. (Build log at
http://toolchain.lug-owl.de/laminar/jobs/linux-powerpc-microwatt_defconfig/69)
Just ftr: How does this work?
On microwatt_defconfig, radix_enabled() is always true so the compiler 
eliminates the else branch.

Christophe

Re: microwatt_defconfig broken: fined reference to `hash__tlb_flush'

From: Jan-Benedict Glaw <jbglaw@lug-owl.de>
Date: 2023-02-24 15:57:07

Hi!

On Fri, 2023-02-17 19:44:27 +0000, Christophe Leroy [off-list ref] wrote:
Le 17/02/2023 à 18:14, Jan-Benedict Glaw a écrit :
quoted
My CI builds showed that the microwatt_defconfig broke somewhere between
(upstream Linus) 6d796c50f84ca79f1722bb131799e5a5710c4700 (last known good, log
at [1]) and 033c40a89f55525139fd5b6342281b09b97d05bf (first known bad, log at
[2]) with this:

[...]
make V=1 ARCH=powerpc CROSS_COMPILE=powerpc64le-linux- INSTALL_MOD_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig INSTALL_DTBS_PATH=/var/lib/laminar/run/linux-powerpc-microwatt_defconfig/28/linux-powerpc-microwatt_defconfig all
[...]
[mk all 2023-02-17 01:42:27] + powerpc64le-linux-ld -EL -z noexecstack --no-warn-rwx-segments -Bstatic --build-id=sha1 --orphan-handling=warn --script=./arch/powerpc/kernel/vmlinux.lds --strip-debug -o .tmp_vmlinux.kallsyms1 --whole-archive vmlinux.a init/version-timestamp.o --no-whole-archive --start-group lib/lib.a --end-group
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/memory.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] memory.c:(.text+0x320): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mmu_gather.o: in function `tlb_flush_mmu_tlbonly':
[mk all 2023-02-17 01:42:28] mmu_gather.c:(.text+0xe0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/mprotect.o: in function `change_protection':
[mk all 2023-02-17 01:42:28] mprotect.c:(.text+0x59c): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] powerpc64le-linux-ld: mm/madvise.o: in function `tlb_end_vma.isra.0':
[mk all 2023-02-17 01:42:28] madvise.c:(.text+0x1f0): undefined reference to `hash__tlb_flush'
[mk all 2023-02-17 01:42:28] make[1]: *** [scripts/Makefile.vmlinux:35: vmlinux] Error 1
[mk all 2023-02-17 01:42:28] make: *** [Makefile:1264: vmlinux] Error 2
The fix is available here : 
https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=4302abc628fc0dc08e5855f21bbfaed407a72bc3
...and in the meantime, it showed up in Linus's tree and resulted in a
successful build:

	http://toolchain.lug-owl.de/laminar/jobs/linux-powerpc-microwatt_defconfig/71

Thanks,
  Jan-Benedict

-- 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help