* [PATCH v6 0/4] kexec: Fix kexec_file_load for llvm16 with PGO
@ 2023-05-01 12:38 Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 1/4] kexec: Support purgatories with .text.hot sections Ricardo Ribalda
` (3 more replies)
0 siblings, 4 replies; 13+ messages in thread
From: Ricardo Ribalda @ 2023-05-01 12:38 UTC (permalink / raw)
To: Eric Biederman, Philipp Rudo, Dave Young, Andrew Morton,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Nathan Chancellor, Tom Rix, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Paul Walmsley, Palmer Dabbelt,
Albert Ou
Cc: Baoquan He, Philipp Rudo, kexec, linux-kernel, Ross Zwisler,
Steven Rostedt, Simon Horman, Nick Desaulniers, llvm,
linuxppc-dev, linux-riscv, Ricardo Ribalda, stable
When upreving llvm I realised that kexec stopped working on my test
platform.
The reason seems to be that due to PGO there are multiple .text sections
on the purgatory, and kexec does not supports that.
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
Changes in v6:
- Replace linker script with Makefile rule. Thanks Nick
- Link to v5: https://lore.kernel.org/r/20230321-kexec_clang16-v5-0-5563bf7c4173@chromium.org
Changes in v5:
- Add warning when multiple text sections are found. Thanks Simon!
- Add Fixes tag.
- Link to v4: https://lore.kernel.org/r/20230321-kexec_clang16-v4-0-1340518f98e9@chromium.org
Changes in v4:
- Add Cc: stable
- Add linker script for x86
- Add a warning when the kernel image has overlapping sections.
- Link to v3: https://lore.kernel.org/r/20230321-kexec_clang16-v3-0-5f016c8d0e87@chromium.org
Changes in v3:
- Fix initial value. Thanks Ross!
- Link to v2: https://lore.kernel.org/r/20230321-kexec_clang16-v2-0-d10e5d517869@chromium.org
Changes in v2:
- Fix if condition. Thanks Steven!.
- Update Philipp email. Thanks Baoquan.
- Link to v1: https://lore.kernel.org/r/20230321-kexec_clang16-v1-0-a768fc2c7c4d@chromium.org
---
Ricardo Ribalda (4):
kexec: Support purgatories with .text.hot sections
x86/purgatory: Remove profile optimization flags
powerpc/purgatory: Remove profile optimization flags
risc/purgatory: Add linker script
arch/powerpc/purgatory/Makefile | 5 +++++
arch/riscv/purgatory/Makefile | 5 +++++
arch/x86/purgatory/Makefile | 5 +++++
kernel/kexec_file.c | 14 +++++++++++++-
4 files changed, 28 insertions(+), 1 deletion(-)
---
base-commit: 58390c8ce1bddb6c623f62e7ed36383e7fa5c02f
change-id: 20230321-kexec_clang16-4510c23d129c
Best regards,
--
Ricardo Ribalda <ribalda@chromium.org>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v6 1/4] kexec: Support purgatories with .text.hot sections
2023-05-01 12:38 [PATCH v6 0/4] kexec: Fix kexec_file_load for llvm16 with PGO Ricardo Ribalda
@ 2023-05-01 12:38 ` Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 2/4] x86/purgatory: Remove profile optimization flags Ricardo Ribalda
` (2 subsequent siblings)
3 siblings, 0 replies; 13+ messages in thread
From: Ricardo Ribalda @ 2023-05-01 12:38 UTC (permalink / raw)
To: Eric Biederman, Philipp Rudo, Dave Young, Andrew Morton,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Nathan Chancellor, Tom Rix, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Paul Walmsley, Palmer Dabbelt,
Albert Ou
Cc: Baoquan He, Philipp Rudo, kexec, linux-kernel, Ross Zwisler,
Steven Rostedt, Simon Horman, Nick Desaulniers, llvm,
linuxppc-dev, linux-riscv, Ricardo Ribalda, stable
Clang16 links the purgatory text in two sections when PGO is in use:
[ 1] .text PROGBITS 0000000000000000 00000040
00000000000011a1 0000000000000000 AX 0 0 16
[ 2] .rela.text RELA 0000000000000000 00003498
0000000000000648 0000000000000018 I 24 1 8
...
[17] .text.hot. PROGBITS 0000000000000000 00003220
000000000000020b 0000000000000000 AX 0 0 1
[18] .rela.text.hot. RELA 0000000000000000 00004428
0000000000000078 0000000000000018 I 24 17 8
And both of them have their range [sh_addr ... sh_addr+sh_size] on the
area pointed by `e_entry`.
This causes that image->start is calculated twice, once for .text and
another time for .text.hot. The second calculation leaves image->start
in a random location.
Because of this, the system crashes immediately after:
kexec_core: Starting new kernel
Cc: stable@vger.kernel.org
Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
Reviewed-by: Ross Zwisler <zwisler@google.com>
Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Reviewed-by: Philipp Rudo <prudo@redhat.com>
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
kernel/kexec_file.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
index f989f5f1933b..69ee4a29136f 100644
--- a/kernel/kexec_file.c
+++ b/kernel/kexec_file.c
@@ -901,10 +901,22 @@ static int kexec_purgatory_setup_sechdrs(struct purgatory_info *pi,
}
offset = ALIGN(offset, align);
+
+ /*
+ * Check if the segment contains the entry point, if so,
+ * calculate the value of image->start based on it.
+ * If the compiler has produced more than one .text section
+ * (Eg: .text.hot), they are generally after the main .text
+ * section, and they shall not be used to calculate
+ * image->start. So do not re-calculate image->start if it
+ * is not set to the initial value, and warn the user so they
+ * have a chance to fix their purgatory's linker script.
+ */
if (sechdrs[i].sh_flags & SHF_EXECINSTR &&
pi->ehdr->e_entry >= sechdrs[i].sh_addr &&
pi->ehdr->e_entry < (sechdrs[i].sh_addr
- + sechdrs[i].sh_size)) {
+ + sechdrs[i].sh_size) &&
+ !WARN_ON(kbuf->image->start != pi->ehdr->e_entry)) {
kbuf->image->start -= sechdrs[i].sh_addr;
kbuf->image->start += kbuf->mem + offset;
}
--
2.40.1.495.gc816e09b53d-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v6 2/4] x86/purgatory: Remove profile optimization flags
2023-05-01 12:38 [PATCH v6 0/4] kexec: Fix kexec_file_load for llvm16 with PGO Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 1/4] kexec: Support purgatories with .text.hot sections Ricardo Ribalda
@ 2023-05-01 12:38 ` Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 3/4] powerpc/purgatory: " Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 4/4] risc/purgatory: Add linker script Ricardo Ribalda
3 siblings, 0 replies; 13+ messages in thread
From: Ricardo Ribalda @ 2023-05-01 12:38 UTC (permalink / raw)
To: Eric Biederman, Philipp Rudo, Dave Young, Andrew Morton,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Nathan Chancellor, Tom Rix, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Paul Walmsley, Palmer Dabbelt,
Albert Ou
Cc: Baoquan He, Philipp Rudo, kexec, linux-kernel, Ross Zwisler,
Steven Rostedt, Simon Horman, Nick Desaulniers, llvm,
linuxppc-dev, linux-riscv, Ricardo Ribalda, stable
If PGO is enabled, the purgatory ends up with multiple .text sections.
This is not supported by kexec and crashes the system.
Cc: stable@vger.kernel.org
Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
arch/x86/purgatory/Makefile | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile
index 82fec66d46d2..7a7a4901ed41 100644
--- a/arch/x86/purgatory/Makefile
+++ b/arch/x86/purgatory/Makefile
@@ -14,6 +14,11 @@ $(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
CFLAGS_sha256.o := -D__DISABLE_EXPORTS
+# When profile optimization is enabled, llvm emits two different overlapping
+# text sections, which is not supported by kexec. Remove profile optimization
+# flags.
+KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
+
# When linking purgatory.ro with -r unresolved symbols are not checked,
# also link a purgatory.chk binary without -r to check for unresolved symbols.
PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
--
2.40.1.495.gc816e09b53d-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v6 3/4] powerpc/purgatory: Remove profile optimization flags
2023-05-01 12:38 [PATCH v6 0/4] kexec: Fix kexec_file_load for llvm16 with PGO Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 1/4] kexec: Support purgatories with .text.hot sections Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 2/4] x86/purgatory: Remove profile optimization flags Ricardo Ribalda
@ 2023-05-01 12:38 ` Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 4/4] risc/purgatory: Add linker script Ricardo Ribalda
3 siblings, 0 replies; 13+ messages in thread
From: Ricardo Ribalda @ 2023-05-01 12:38 UTC (permalink / raw)
To: Eric Biederman, Philipp Rudo, Dave Young, Andrew Morton,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Nathan Chancellor, Tom Rix, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Paul Walmsley, Palmer Dabbelt,
Albert Ou
Cc: Baoquan He, Philipp Rudo, kexec, linux-kernel, Ross Zwisler,
Steven Rostedt, Simon Horman, Nick Desaulniers, llvm,
linuxppc-dev, linux-riscv, Ricardo Ribalda, stable
If PGO is enabled, the purgatory ends up with multiple .text sections.
This is not supported by kexec and crashes the system.
Cc: stable@vger.kernel.org
Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
arch/powerpc/purgatory/Makefile | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/powerpc/purgatory/Makefile b/arch/powerpc/purgatory/Makefile
index 6f5e2727963c..5efb164330b2 100644
--- a/arch/powerpc/purgatory/Makefile
+++ b/arch/powerpc/purgatory/Makefile
@@ -5,6 +5,11 @@ KCSAN_SANITIZE := n
targets += trampoline_$(BITS).o purgatory.ro
+# When profile optimization is enabled, llvm emits two different overlapping
+# text sections, which is not supported by kexec. Remove profile optimization
+# flags.
+KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
+
LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined
$(obj)/purgatory.ro: $(obj)/trampoline_$(BITS).o FORCE
--
2.40.1.495.gc816e09b53d-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v6 4/4] risc/purgatory: Add linker script
2023-05-01 12:38 [PATCH v6 0/4] kexec: Fix kexec_file_load for llvm16 with PGO Ricardo Ribalda
` (2 preceding siblings ...)
2023-05-01 12:38 ` [PATCH v6 3/4] powerpc/purgatory: " Ricardo Ribalda
@ 2023-05-01 12:38 ` Ricardo Ribalda
2023-05-01 12:44 ` Palmer Dabbelt
` (2 more replies)
3 siblings, 3 replies; 13+ messages in thread
From: Ricardo Ribalda @ 2023-05-01 12:38 UTC (permalink / raw)
To: Eric Biederman, Philipp Rudo, Dave Young, Andrew Morton,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Nathan Chancellor, Tom Rix, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Paul Walmsley, Palmer Dabbelt,
Albert Ou
Cc: Baoquan He, Philipp Rudo, kexec, linux-kernel, Ross Zwisler,
Steven Rostedt, Simon Horman, Nick Desaulniers, llvm,
linuxppc-dev, linux-riscv, Ricardo Ribalda, stable
If PGO is enabled, the purgatory ends up with multiple .text sections.
This is not supported by kexec and crashes the system.
Cc: stable@vger.kernel.org
Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
arch/riscv/purgatory/Makefile | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
index 5730797a6b40..cf3a44121a90 100644
--- a/arch/riscv/purgatory/Makefile
+++ b/arch/riscv/purgatory/Makefile
@@ -35,6 +35,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
CFLAGS_string.o := -D__DISABLE_EXPORTS
CFLAGS_ctype.o := -D__DISABLE_EXPORTS
+# When profile optimization is enabled, llvm emits two different overlapping
+# text sections, which is not supported by kexec. Remove profile optimization
+# flags.
+KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
+
# When linking purgatory.ro with -r unresolved symbols are not checked,
# also link a purgatory.chk binary without -r to check for unresolved symbols.
PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
--
2.40.1.495.gc816e09b53d-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v6 4/4] risc/purgatory: Add linker script
2023-05-01 12:38 ` [PATCH v6 4/4] risc/purgatory: Add linker script Ricardo Ribalda
@ 2023-05-01 12:44 ` Palmer Dabbelt
2023-05-01 16:19 ` Nick Desaulniers
2023-05-01 17:40 ` Conor Dooley
2 siblings, 0 replies; 13+ messages in thread
From: Palmer Dabbelt @ 2023-05-01 12:44 UTC (permalink / raw)
To: ribalda
Cc: ebiederm, prudo, dyoung, akpm, tglx, mingo, bp, dave.hansen, x86,
hpa, nathan, trix, mpe, npiggin, christophe.leroy, Paul Walmsley,
aou, bhe, prudo, kexec, linux-kernel, zwisler, rostedt, horms,
ndesaulniers, llvm, linuxppc-dev, linux-riscv, ribalda, stable
On Mon, 01 May 2023 05:38:22 PDT (-0700), ribalda@chromium.org wrote:
> If PGO is enabled, the purgatory ends up with multiple .text sections.
> This is not supported by kexec and crashes the system.
>
> Cc: stable@vger.kernel.org
> Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> ---
> arch/riscv/purgatory/Makefile | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
> index 5730797a6b40..cf3a44121a90 100644
> --- a/arch/riscv/purgatory/Makefile
> +++ b/arch/riscv/purgatory/Makefile
> @@ -35,6 +35,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
> CFLAGS_string.o := -D__DISABLE_EXPORTS
> CFLAGS_ctype.o := -D__DISABLE_EXPORTS
>
> +# When profile optimization is enabled, llvm emits two different overlapping
> +# text sections, which is not supported by kexec. Remove profile optimization
> +# flags.
> +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
> +
> # When linking purgatory.ro with -r unresolved symbols are not checked,
> # also link a purgatory.chk binary without -r to check for unresolved symbols.
> PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 4/4] risc/purgatory: Add linker script
2023-05-01 12:38 ` [PATCH v6 4/4] risc/purgatory: Add linker script Ricardo Ribalda
2023-05-01 12:44 ` Palmer Dabbelt
@ 2023-05-01 16:19 ` Nick Desaulniers
2023-05-01 17:18 ` Ricardo Ribalda
2023-05-01 17:40 ` Conor Dooley
2 siblings, 1 reply; 13+ messages in thread
From: Nick Desaulniers @ 2023-05-01 16:19 UTC (permalink / raw)
To: Ricardo Ribalda
Cc: Eric Biederman, Philipp Rudo, Dave Young, Andrew Morton,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Nathan Chancellor, Tom Rix, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Baoquan He, Philipp Rudo, kexec, linux-kernel,
Ross Zwisler, Steven Rostedt, Simon Horman, llvm, linuxppc-dev,
linux-riscv, stable
On Mon, May 1, 2023 at 5:39 AM Ricardo Ribalda <ribalda@chromium.org> wrote:
>
> If PGO is enabled, the purgatory ends up with multiple .text sections.
> This is not supported by kexec and crashes the system.
>
> Cc: stable@vger.kernel.org
> Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Hi Ricardo,
Thanks for the series. Does this patch 4/4 need a new online commit
description? It's not adding a linker script (maybe an earlier version
was).
> ---
> arch/riscv/purgatory/Makefile | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
> index 5730797a6b40..cf3a44121a90 100644
> --- a/arch/riscv/purgatory/Makefile
> +++ b/arch/riscv/purgatory/Makefile
> @@ -35,6 +35,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
> CFLAGS_string.o := -D__DISABLE_EXPORTS
> CFLAGS_ctype.o := -D__DISABLE_EXPORTS
>
> +# When profile optimization is enabled, llvm emits two different overlapping
> +# text sections, which is not supported by kexec. Remove profile optimization
> +# flags.
> +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
> +
> # When linking purgatory.ro with -r unresolved symbols are not checked,
> # also link a purgatory.chk binary without -r to check for unresolved symbols.
> PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
>
> --
> 2.40.1.495.gc816e09b53d-goog
>
--
Thanks,
~Nick Desaulniers
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 4/4] risc/purgatory: Add linker script
2023-05-01 16:19 ` Nick Desaulniers
@ 2023-05-01 17:18 ` Ricardo Ribalda
2023-05-01 17:28 ` Conor Dooley
0 siblings, 1 reply; 13+ messages in thread
From: Ricardo Ribalda @ 2023-05-01 17:18 UTC (permalink / raw)
To: Nick Desaulniers
Cc: Eric Biederman, Philipp Rudo, Dave Young, Andrew Morton,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Nathan Chancellor, Tom Rix, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Baoquan He, Philipp Rudo, kexec, linux-kernel,
Ross Zwisler, Steven Rostedt, Simon Horman, llvm, linuxppc-dev,
linux-riscv, stable
Hi Nick
Thanks for catching this. It should have said
risc/purgatory: Remove profile optimization flags
Will fix it on my local branch in case there is a next version of the
series. Otherwise, please the maintainer fix the subject.
Thanks!
On Mon, 1 May 2023 at 18:19, Nick Desaulniers <ndesaulniers@google.com> wrote:
>
> On Mon, May 1, 2023 at 5:39 AM Ricardo Ribalda <ribalda@chromium.org> wrote:
> >
> > If PGO is enabled, the purgatory ends up with multiple .text sections.
> > This is not supported by kexec and crashes the system.
> >
> > Cc: stable@vger.kernel.org
> > Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
> > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
>
> Hi Ricardo,
> Thanks for the series. Does this patch 4/4 need a new online commit
> description? It's not adding a linker script (maybe an earlier version
> was).
>
> > ---
> > arch/riscv/purgatory/Makefile | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
> > index 5730797a6b40..cf3a44121a90 100644
> > --- a/arch/riscv/purgatory/Makefile
> > +++ b/arch/riscv/purgatory/Makefile
> > @@ -35,6 +35,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
> > CFLAGS_string.o := -D__DISABLE_EXPORTS
> > CFLAGS_ctype.o := -D__DISABLE_EXPORTS
> >
> > +# When profile optimization is enabled, llvm emits two different overlapping
> > +# text sections, which is not supported by kexec. Remove profile optimization
> > +# flags.
> > +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
> > +
> > # When linking purgatory.ro with -r unresolved symbols are not checked,
> > # also link a purgatory.chk binary without -r to check for unresolved symbols.
> > PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
> >
> > --
> > 2.40.1.495.gc816e09b53d-goog
> >
>
>
> --
> Thanks,
> ~Nick Desaulniers
--
Ricardo Ribalda
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 4/4] risc/purgatory: Add linker script
2023-05-01 17:18 ` Ricardo Ribalda
@ 2023-05-01 17:28 ` Conor Dooley
2023-05-01 17:36 ` Ricardo Ribalda
0 siblings, 1 reply; 13+ messages in thread
From: Conor Dooley @ 2023-05-01 17:28 UTC (permalink / raw)
To: Ricardo Ribalda
Cc: Nick Desaulniers, Eric Biederman, Philipp Rudo, Dave Young,
Andrew Morton, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Nathan Chancellor, Tom Rix,
Michael Ellerman, Nicholas Piggin, Christophe Leroy,
Paul Walmsley, Palmer Dabbelt, Albert Ou, Baoquan He,
Philipp Rudo, kexec, linux-kernel, Ross Zwisler, Steven Rostedt,
Simon Horman, llvm, linuxppc-dev, linux-riscv, stable
[-- Attachment #1: Type: text/plain, Size: 2536 bytes --]
On Mon, May 01, 2023 at 07:18:12PM +0200, Ricardo Ribalda wrote:
> On Mon, 1 May 2023 at 18:19, Nick Desaulniers <ndesaulniers@google.com> wrote:
> >
> > On Mon, May 1, 2023 at 5:39 AM Ricardo Ribalda <ribalda@chromium.org> wrote:
> > >
> > > If PGO is enabled, the purgatory ends up with multiple .text sections.
> > > This is not supported by kexec and crashes the system.
> > >
> > > Cc: stable@vger.kernel.org
> > > Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
> > > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> >
> > Hi Ricardo,
> > Thanks for the series. Does this patch 4/4 need a new online commit
> > description? It's not adding a linker script (maybe an earlier version
> > was).
> Thanks for catching this. It should have said
>
> risc/purgatory: Remove profile optimization flags
^^
Perhaps with the omitted v added too?
Also while playing the $subject nitpicking game, is it not called
"profile**-guided** optimisation" (and ditto in the comments)?
Cheers,
Conor.
> Will fix it on my local branch in case there is a next version of the
> series. Otherwise, please the maintainer fix the subject.
> > > ---
> > > arch/riscv/purgatory/Makefile | 5 +++++
> > > 1 file changed, 5 insertions(+)
> > >
> > > diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
> > > index 5730797a6b40..cf3a44121a90 100644
> > > --- a/arch/riscv/purgatory/Makefile
> > > +++ b/arch/riscv/purgatory/Makefile
> > > @@ -35,6 +35,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
> > > CFLAGS_string.o := -D__DISABLE_EXPORTS
> > > CFLAGS_ctype.o := -D__DISABLE_EXPORTS
> > >
> > > +# When profile optimization is enabled, llvm emits two different overlapping
> > > +# text sections, which is not supported by kexec. Remove profile optimization
> > > +# flags.
> > > +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
> > > +
> > > # When linking purgatory.ro with -r unresolved symbols are not checked,
> > > # also link a purgatory.chk binary without -r to check for unresolved symbols.
> > > PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
> > >
> > > --
> > > 2.40.1.495.gc816e09b53d-goog
> > >
> >
> >
> > --
> > Thanks,
> > ~Nick Desaulniers
>
>
>
> --
> Ricardo Ribalda
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 4/4] risc/purgatory: Add linker script
2023-05-01 17:28 ` Conor Dooley
@ 2023-05-01 17:36 ` Ricardo Ribalda
0 siblings, 0 replies; 13+ messages in thread
From: Ricardo Ribalda @ 2023-05-01 17:36 UTC (permalink / raw)
To: Conor Dooley
Cc: Nick Desaulniers, Eric Biederman, Philipp Rudo, Dave Young,
Andrew Morton, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Nathan Chancellor, Tom Rix,
Michael Ellerman, Nicholas Piggin, Christophe Leroy,
Paul Walmsley, Palmer Dabbelt, Albert Ou, Baoquan He,
Philipp Rudo, kexec, linux-kernel, Ross Zwisler, Steven Rostedt,
Simon Horman, llvm, linuxppc-dev, linux-riscv, stable
Hi Conor
Fixed on my branch
https://git.kernel.org/pub/scm/linux/kernel/git/ribalda/linux.git/commit/?h=b4/kexec_clang16&id=1e9cda9fa638cc72581986f60b490cc069a38f75
Will submit a new version after a while :)
Thanks!
On Mon, 1 May 2023 at 19:28, Conor Dooley <conor@kernel.org> wrote:
>
> On Mon, May 01, 2023 at 07:18:12PM +0200, Ricardo Ribalda wrote:
> > On Mon, 1 May 2023 at 18:19, Nick Desaulniers <ndesaulniers@google.com> wrote:
> > >
> > > On Mon, May 1, 2023 at 5:39 AM Ricardo Ribalda <ribalda@chromium.org> wrote:
> > > >
> > > > If PGO is enabled, the purgatory ends up with multiple .text sections.
> > > > This is not supported by kexec and crashes the system.
> > > >
> > > > Cc: stable@vger.kernel.org
> > > > Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
> > > > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> > >
> > > Hi Ricardo,
> > > Thanks for the series. Does this patch 4/4 need a new online commit
> > > description? It's not adding a linker script (maybe an earlier version
> > > was).
>
> > Thanks for catching this. It should have said
> >
> > risc/purgatory: Remove profile optimization flags
> ^^
> Perhaps with the omitted v added too?
>
> Also while playing the $subject nitpicking game, is it not called
> "profile**-guided** optimisation" (and ditto in the comments)?
>
> Cheers,
> Conor.
>
> > Will fix it on my local branch in case there is a next version of the
> > series. Otherwise, please the maintainer fix the subject.
>
> > > > ---
> > > > arch/riscv/purgatory/Makefile | 5 +++++
> > > > 1 file changed, 5 insertions(+)
> > > >
> > > > diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
> > > > index 5730797a6b40..cf3a44121a90 100644
> > > > --- a/arch/riscv/purgatory/Makefile
> > > > +++ b/arch/riscv/purgatory/Makefile
> > > > @@ -35,6 +35,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
> > > > CFLAGS_string.o := -D__DISABLE_EXPORTS
> > > > CFLAGS_ctype.o := -D__DISABLE_EXPORTS
> > > >
> > > > +# When profile optimization is enabled, llvm emits two different overlapping
> > > > +# text sections, which is not supported by kexec. Remove profile optimization
> > > > +# flags.
> > > > +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
> > > > +
> > > > # When linking purgatory.ro with -r unresolved symbols are not checked,
> > > > # also link a purgatory.chk binary without -r to check for unresolved symbols.
> > > > PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
> > > >
> > > > --
> > > > 2.40.1.495.gc816e09b53d-goog
> > > >
> > >
> > >
> > > --
> > > Thanks,
> > > ~Nick Desaulniers
> >
> >
> >
> > --
> > Ricardo Ribalda
> >
> > _______________________________________________
> > linux-riscv mailing list
> > linux-riscv@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-riscv
--
Ricardo Ribalda
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 4/4] risc/purgatory: Add linker script
2023-05-01 12:38 ` [PATCH v6 4/4] risc/purgatory: Add linker script Ricardo Ribalda
2023-05-01 12:44 ` Palmer Dabbelt
2023-05-01 16:19 ` Nick Desaulniers
@ 2023-05-01 17:40 ` Conor Dooley
2023-05-01 19:54 ` Ricardo Ribalda
2 siblings, 1 reply; 13+ messages in thread
From: Conor Dooley @ 2023-05-01 17:40 UTC (permalink / raw)
To: Ricardo Ribalda
Cc: Eric Biederman, Philipp Rudo, Dave Young, Andrew Morton,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Nathan Chancellor, Tom Rix, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Baoquan He, Philipp Rudo, kexec, linux-kernel,
Ross Zwisler, Steven Rostedt, Simon Horman, Nick Desaulniers,
llvm, linuxppc-dev, linux-riscv, stable
[-- Attachment #1: Type: text/plain, Size: 1776 bytes --]
Hey Ricardo,
On Mon, May 01, 2023 at 02:38:22PM +0200, Ricardo Ribalda wrote:
> If PGO is enabled, the purgatory ends up with multiple .text sections.
> This is not supported by kexec and crashes the system.
>
> Cc: stable@vger.kernel.org
> Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> ---
> arch/riscv/purgatory/Makefile | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
> index 5730797a6b40..cf3a44121a90 100644
> --- a/arch/riscv/purgatory/Makefile
> +++ b/arch/riscv/purgatory/Makefile
> @@ -35,6 +35,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
> CFLAGS_string.o := -D__DISABLE_EXPORTS
> CFLAGS_ctype.o := -D__DISABLE_EXPORTS
>
> +# When profile optimization is enabled, llvm emits two different overlapping
> +# text sections, which is not supported by kexec. Remove profile optimization
> +# flags.
> +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
With the caveat of not being au fait with the workings of either PGO or
of purgatory, how come you modify KBUILD_CFLAGS here rather than the
purgatory specific PURGATORY_CFLAGS that are used later in the file?
Cheers,
Conor.
> +
> # When linking purgatory.ro with -r unresolved symbols are not checked,
> # also link a purgatory.chk binary without -r to check for unresolved symbols.
> PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
>
> --
> 2.40.1.495.gc816e09b53d-goog
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 4/4] risc/purgatory: Add linker script
2023-05-01 17:40 ` Conor Dooley
@ 2023-05-01 19:54 ` Ricardo Ribalda
2023-05-05 12:30 ` Conor Dooley
0 siblings, 1 reply; 13+ messages in thread
From: Ricardo Ribalda @ 2023-05-01 19:54 UTC (permalink / raw)
To: Conor Dooley
Cc: Eric Biederman, Philipp Rudo, Dave Young, Andrew Morton,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Nathan Chancellor, Tom Rix, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Baoquan He, Philipp Rudo, kexec, linux-kernel,
Ross Zwisler, Steven Rostedt, Simon Horman, Nick Desaulniers,
llvm, linuxppc-dev, linux-riscv, stable
Hi Conor
On Mon, 1 May 2023 at 19:41, Conor Dooley <conor@kernel.org> wrote:
>
> Hey Ricardo,
>
> On Mon, May 01, 2023 at 02:38:22PM +0200, Ricardo Ribalda wrote:
> > If PGO is enabled, the purgatory ends up with multiple .text sections.
> > This is not supported by kexec and crashes the system.
> >
> > Cc: stable@vger.kernel.org
> > Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
> > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> > ---
> > arch/riscv/purgatory/Makefile | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
> > index 5730797a6b40..cf3a44121a90 100644
> > --- a/arch/riscv/purgatory/Makefile
> > +++ b/arch/riscv/purgatory/Makefile
> > @@ -35,6 +35,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
> > CFLAGS_string.o := -D__DISABLE_EXPORTS
> > CFLAGS_ctype.o := -D__DISABLE_EXPORTS
> >
> > +# When profile optimization is enabled, llvm emits two different overlapping
> > +# text sections, which is not supported by kexec. Remove profile optimization
> > +# flags.
> > +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
>
> With the caveat of not being au fait with the workings of either PGO or
> of purgatory, how come you modify KBUILD_CFLAGS here rather than the
> purgatory specific PURGATORY_CFLAGS that are used later in the file?
Definitely, not a Makefile expert here, but when I tried this:
@@ -35,6 +40,7 @@ PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
PURGATORY_CFLAGS := -mcmodel=large -ffreestanding
-fno-zero-initialized-in-bss -g0
PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
PURGATORY_CFLAGS += -fno-stack-protector
+PURGATORY_CFLAGS := $(filter-out -fprofile-sample-use=%
-fprofile-use=%,$(KBUILD_CFLAGS))
It did not work.
Fixes: bde971a83bbf ("KVM: arm64: nvhe: Fix build with profile optimization")
does this approach, so this is what I tried and worked.
Thanks!
>
> Cheers,
> Conor.
>
> > +
> > # When linking purgatory.ro with -r unresolved symbols are not checked,
> > # also link a purgatory.chk binary without -r to check for unresolved symbols.
> > PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
> >
> > --
> > 2.40.1.495.gc816e09b53d-goog
> >
> >
> > _______________________________________________
> > linux-riscv mailing list
> > linux-riscv@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-riscv
--
Ricardo Ribalda
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 4/4] risc/purgatory: Add linker script
2023-05-01 19:54 ` Ricardo Ribalda
@ 2023-05-05 12:30 ` Conor Dooley
0 siblings, 0 replies; 13+ messages in thread
From: Conor Dooley @ 2023-05-05 12:30 UTC (permalink / raw)
To: Ricardo Ribalda
Cc: Conor Dooley, Eric Biederman, Philipp Rudo, Dave Young,
Andrew Morton, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Nathan Chancellor, Tom Rix,
Michael Ellerman, Nicholas Piggin, Christophe Leroy,
Paul Walmsley, Palmer Dabbelt, Albert Ou, Baoquan He,
Philipp Rudo, kexec, linux-kernel, Ross Zwisler, Steven Rostedt,
Simon Horman, Nick Desaulniers, llvm, linuxppc-dev, linux-riscv,
stable
[-- Attachment #1: Type: text/plain, Size: 2987 bytes --]
On Mon, May 01, 2023 at 09:54:43PM +0200, Ricardo Ribalda wrote:
> On Mon, 1 May 2023 at 19:41, Conor Dooley <conor@kernel.org> wrote:
> > On Mon, May 01, 2023 at 02:38:22PM +0200, Ricardo Ribalda wrote:
> > > If PGO is enabled, the purgatory ends up with multiple .text sections.
> > > This is not supported by kexec and crashes the system.
> > >
> > > Cc: stable@vger.kernel.org
> > > Fixes: 930457057abe ("kernel/kexec_file.c: split up __kexec_load_puragory")
> > > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> > > ---
> > > arch/riscv/purgatory/Makefile | 5 +++++
> > > 1 file changed, 5 insertions(+)
> > >
> > > diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
> > > index 5730797a6b40..cf3a44121a90 100644
> > > --- a/arch/riscv/purgatory/Makefile
> > > +++ b/arch/riscv/purgatory/Makefile
> > > @@ -35,6 +35,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
> > > CFLAGS_string.o := -D__DISABLE_EXPORTS
> > > CFLAGS_ctype.o := -D__DISABLE_EXPORTS
> > >
> > > +# When profile optimization is enabled, llvm emits two different overlapping
> > > +# text sections, which is not supported by kexec. Remove profile optimization
> > > +# flags.
> > > +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
> >
> > With the caveat of not being au fait with the workings of either PGO or
> > of purgatory, how come you modify KBUILD_CFLAGS here rather than the
> > purgatory specific PURGATORY_CFLAGS that are used later in the file?
>
> Definitely, not a Makefile expert here, but when I tried this:
>
> @@ -35,6 +40,7 @@ PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
> PURGATORY_CFLAGS := -mcmodel=large -ffreestanding
> -fno-zero-initialized-in-bss -g0
> PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
> PURGATORY_CFLAGS += -fno-stack-protector
> +PURGATORY_CFLAGS := $(filter-out -fprofile-sample-use=%
> -fprofile-use=%,$(KBUILD_CFLAGS))
>
> It did not work.
Unfortunately I am oh-so-far from an expert on this kind of thing, but I
had thought that PURGATORY_CFLAGS_REMOVE was intended for this sort of
purpose.
> Fixes: bde971a83bbf ("KVM: arm64: nvhe: Fix build with profile optimization")
>
> does this approach, so this is what I tried and worked.
That doesn't have a specific CFLAGS though afaict.
Perhaps Nick etc have a more informed opinion here than I do, sorry.
Thanks,
Conor.
> > > +
> > > # When linking purgatory.ro with -r unresolved symbols are not checked,
> > > # also link a purgatory.chk binary without -r to check for unresolved symbols.
> > > PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
> > >
> > > --
> > > 2.40.1.495.gc816e09b53d-goog
> > >
> > >
> > > _______________________________________________
> > > linux-riscv mailing list
> > > linux-riscv@lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/linux-riscv
>
>
>
> --
> Ricardo Ribalda
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2023-05-05 12:30 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-01 12:38 [PATCH v6 0/4] kexec: Fix kexec_file_load for llvm16 with PGO Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 1/4] kexec: Support purgatories with .text.hot sections Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 2/4] x86/purgatory: Remove profile optimization flags Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 3/4] powerpc/purgatory: " Ricardo Ribalda
2023-05-01 12:38 ` [PATCH v6 4/4] risc/purgatory: Add linker script Ricardo Ribalda
2023-05-01 12:44 ` Palmer Dabbelt
2023-05-01 16:19 ` Nick Desaulniers
2023-05-01 17:18 ` Ricardo Ribalda
2023-05-01 17:28 ` Conor Dooley
2023-05-01 17:36 ` Ricardo Ribalda
2023-05-01 17:40 ` Conor Dooley
2023-05-01 19:54 ` Ricardo Ribalda
2023-05-05 12:30 ` Conor Dooley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).