Message ID | 20241118171809.2447714-1-andrew.cooper3@citrix.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | x86/boot: Introduce boot-helpers.h | expand |
On 18.11.2024 18:18, Andrew Cooper wrote: > Eclair complains that neither reloc_trampoline{32,64}() can see their > declarations. > > reloc_trampoline32() needs to become asmlinkage, while reloc_trampoline64() > needs declaring properly in a way that both efi-boot.h and reloc-trampoline.c > can see. > > Introduce boot-helpers.h for the purpose. > > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> > --- /dev/null > +++ b/xen/arch/x86/include/asm/boot-helpers.h > @@ -0,0 +1,13 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Declarations for helper functions compiled for both 32bit and 64bit. > + * > + * The 32bit forms are called only from assembly, so no declaration is provide > + * here. > + */ How certain are you/we that what is said in the 2nd paragraph will remain as a pattern? Also, nit: s/provide/provided/? Jan
On Mon, Nov 18, 2024 at 5:18 PM Andrew Cooper <andrew.cooper3@citrix.com> wrote: > > Eclair complains that neither reloc_trampoline{32,64}() can see their > declarations. > > reloc_trampoline32() needs to become asmlinkage, while reloc_trampoline64() > needs declaring properly in a way that both efi-boot.h and reloc-trampoline.c > can see. > > Introduce boot-helpers.h for the purpose. > > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> > --- > CC: Jan Beulich <JBeulich@suse.com> > CC: Roger Pau Monné <roger.pau@citrix.com> > CC: Frediano Ziglio <frediano.ziglio@cloud.com> > CC: Stefano Stabellini <sstabellini@kernel.org> > > https://gitlab.com/xen-project/people/andyhhp/xen/-/pipelines/1549438881 > --- > xen/arch/x86/boot/reloc-trampoline.c | 4 +++- > xen/arch/x86/efi/efi-boot.h | 4 ++-- > xen/arch/x86/include/asm/boot-helpers.h | 13 +++++++++++++ > 3 files changed, 18 insertions(+), 3 deletions(-) > create mode 100644 xen/arch/x86/include/asm/boot-helpers.h > > diff --git a/xen/arch/x86/boot/reloc-trampoline.c b/xen/arch/x86/boot/reloc-trampoline.c > index d5548eb08f85..e35e7c78aa86 100644 > --- a/xen/arch/x86/boot/reloc-trampoline.c > +++ b/xen/arch/x86/boot/reloc-trampoline.c > @@ -2,13 +2,15 @@ > > #include <xen/compiler.h> > #include <xen/stdint.h> > + > +#include <asm/boot-helpers.h> > #include <asm/trampoline.h> > > extern const int32_t __trampoline_rel_start[], __trampoline_rel_stop[]; > extern const int32_t __trampoline_seg_start[], __trampoline_seg_stop[]; > > #if defined(__i386__) > -void reloc_trampoline32(void) > +void asmlinkage reloc_trampoline32(void) > #elif defined (__x86_64__) > void reloc_trampoline64(void) > #else > diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h > index 9d3f2b71447e..1d8902a9a724 100644 > --- a/xen/arch/x86/efi/efi-boot.h > +++ b/xen/arch/x86/efi/efi-boot.h > @@ -4,6 +4,8 @@ > * therefore can define arch specific global variables. > */ > #include <xen/vga.h> > + > +#include <asm/boot-helpers.h> > #include <asm/e820.h> > #include <asm/edd.h> > #include <asm/microcode.h> > @@ -103,8 +105,6 @@ static void __init efi_arch_relocate_image(unsigned long delta) > } > } > > -void reloc_trampoline64(void); > - > static void __init relocate_trampoline(unsigned long phys) > { > trampoline_phys = phys; > diff --git a/xen/arch/x86/include/asm/boot-helpers.h b/xen/arch/x86/include/asm/boot-helpers.h > new file mode 100644 > index 000000000000..166f49b4da01 > --- /dev/null > +++ b/xen/arch/x86/include/asm/boot-helpers.h > @@ -0,0 +1,13 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Declarations for helper functions compiled for both 32bit and 64bit. > + * > + * The 32bit forms are called only from assembly, so no declaration is provide > + * here. > + */ > +#ifndef X86_BOOT_HELPERS_H > +#define X86_BOOT_HELPERS_H Why not follow the coding style ? IMHO if we don't agree on coding style we should update it, otherwise we should follow coding style. Maybe considering this https://lists.xenproject.org/archives/html/xen-devel/2024-11/msg00658.html move the file into the boot include directory instead? > + > +void reloc_trampoline64(void); > + > +#endif /* X86_BOOT_HELPERS_H */ Frediano
On 19/11/2024 8:19 am, Jan Beulich wrote: > On 18.11.2024 18:18, Andrew Cooper wrote: >> Eclair complains that neither reloc_trampoline{32,64}() can see their >> declarations. >> >> reloc_trampoline32() needs to become asmlinkage, while reloc_trampoline64() >> needs declaring properly in a way that both efi-boot.h and reloc-trampoline.c >> can see. >> >> Introduce boot-helpers.h for the purpose. >> >> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> > Reviewed-by: Jan Beulich <jbeulich@suse.com> Thanks. >> --- /dev/null >> +++ b/xen/arch/x86/include/asm/boot-helpers.h >> @@ -0,0 +1,13 @@ >> +/* SPDX-License-Identifier: GPL-2.0-only */ >> +/* >> + * Declarations for helper functions compiled for both 32bit and 64bit. >> + * >> + * The 32bit forms are called only from assembly, so no declaration is provide >> + * here. >> + */ > How certain are you/we that what is said in the 2nd paragraph will remain > as a pattern? Unsure, but there needs to be an explanation of why reloc_trampoline32() isn't here. It's not clear how we'd even safely get 32bit declarations here. They would really want to be nocall, so the rest of Xen can't use them accidentally. The comment is easy enough to change if the circumstances change. > Also, nit: s/provide/provided/? Oops yes, will fix. ~Andrew
diff --git a/xen/arch/x86/boot/reloc-trampoline.c b/xen/arch/x86/boot/reloc-trampoline.c index d5548eb08f85..e35e7c78aa86 100644 --- a/xen/arch/x86/boot/reloc-trampoline.c +++ b/xen/arch/x86/boot/reloc-trampoline.c @@ -2,13 +2,15 @@ #include <xen/compiler.h> #include <xen/stdint.h> + +#include <asm/boot-helpers.h> #include <asm/trampoline.h> extern const int32_t __trampoline_rel_start[], __trampoline_rel_stop[]; extern const int32_t __trampoline_seg_start[], __trampoline_seg_stop[]; #if defined(__i386__) -void reloc_trampoline32(void) +void asmlinkage reloc_trampoline32(void) #elif defined (__x86_64__) void reloc_trampoline64(void) #else diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h index 9d3f2b71447e..1d8902a9a724 100644 --- a/xen/arch/x86/efi/efi-boot.h +++ b/xen/arch/x86/efi/efi-boot.h @@ -4,6 +4,8 @@ * therefore can define arch specific global variables. */ #include <xen/vga.h> + +#include <asm/boot-helpers.h> #include <asm/e820.h> #include <asm/edd.h> #include <asm/microcode.h> @@ -103,8 +105,6 @@ static void __init efi_arch_relocate_image(unsigned long delta) } } -void reloc_trampoline64(void); - static void __init relocate_trampoline(unsigned long phys) { trampoline_phys = phys; diff --git a/xen/arch/x86/include/asm/boot-helpers.h b/xen/arch/x86/include/asm/boot-helpers.h new file mode 100644 index 000000000000..166f49b4da01 --- /dev/null +++ b/xen/arch/x86/include/asm/boot-helpers.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Declarations for helper functions compiled for both 32bit and 64bit. + * + * The 32bit forms are called only from assembly, so no declaration is provide + * here. + */ +#ifndef X86_BOOT_HELPERS_H +#define X86_BOOT_HELPERS_H + +void reloc_trampoline64(void); + +#endif /* X86_BOOT_HELPERS_H */
Eclair complains that neither reloc_trampoline{32,64}() can see their declarations. reloc_trampoline32() needs to become asmlinkage, while reloc_trampoline64() needs declaring properly in a way that both efi-boot.h and reloc-trampoline.c can see. Introduce boot-helpers.h for the purpose. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> --- CC: Jan Beulich <JBeulich@suse.com> CC: Roger Pau Monné <roger.pau@citrix.com> CC: Frediano Ziglio <frediano.ziglio@cloud.com> CC: Stefano Stabellini <sstabellini@kernel.org> https://gitlab.com/xen-project/people/andyhhp/xen/-/pipelines/1549438881 --- xen/arch/x86/boot/reloc-trampoline.c | 4 +++- xen/arch/x86/efi/efi-boot.h | 4 ++-- xen/arch/x86/include/asm/boot-helpers.h | 13 +++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 xen/arch/x86/include/asm/boot-helpers.h