Christophe Leroy <christophe.le...@csgroup.eu> writes: > Le 18/05/2016 à 03:16, Daniel Axtens a écrit : >> Sparse picked up a number of functions that are implemented in C and >> then only referred to in asm code. >> >> This introduces asm-prototypes.h, which provides a place for >> prototypes of these functions. > > It looks like this is a mis-use of asm-prototypes.h > > On other architectures, asm-prototypes.h is there to allow MODVERSION to > sent versions for exported assembly functions (I checked history of that > file in x86 and arm64).
Hmm, I was young(er) and (more) inexperienced 4 years ago and wouldn't have thought to check x86 and arm64. > It looks like you have used it on the other way round, you have declared > in it C functions used by ASM functions, whereas it is supposed to be > dedicated to declaring exported ASM functions used by C functions. > > Any plan to fix that ? What should we call it? Kind regards, Daniel > > Christophe > >> >> This silences some sparse warnings. >> >> Signed-off-by: Daniel Axtens <d...@axtens.net> >> --- >> arch/powerpc/include/asm/asm-prototypes.h | 79 >> +++++++++++++++++++++++ >> arch/powerpc/kernel/machine_kexec_64.c | 1 + >> arch/powerpc/kernel/smp.c | 1 + >> arch/powerpc/kernel/traps.c | 1 + >> arch/powerpc/lib/vmx-helper.c | 1 + >> arch/powerpc/platforms/powernv/opal-tracepoints.c | 1 + >> arch/powerpc/platforms/pseries/lpar.c | 1 + >> 7 files changed, 85 insertions(+) >> create mode 100644 arch/powerpc/include/asm/asm-prototypes.h >> >> diff --git a/arch/powerpc/include/asm/asm-prototypes.h >> b/arch/powerpc/include/asm/asm-prototypes.h >> new file mode 100644 >> index 000000000000..6ee0a9d80bbc >> --- /dev/null >> +++ b/arch/powerpc/include/asm/asm-prototypes.h >> @@ -0,0 +1,79 @@ >> +/* >> + * This program is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License, version 2, as >> + * published by the Free Software Foundation. >> + * >> + * This program is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + * >> + * Copyright IBM Corp. 2016 >> + * >> + * Authors: Daniel Axtens <d...@axtens.net> >> + */ >> + >> +/* >> + * This file is for prototypes of C functions that are only called >> + * from asm, and any associated variables. >> + */ >> + >> +#include <linux/threads.h> >> +#include <linux/kprobes.h> >> + >> +/* SMP */ >> +extern struct thread_info *current_set[NR_CPUS]; >> +extern struct thread_info *secondary_ti; >> +void start_secondary(void *unused); >> + >> +/* kexec */ >> +struct paca_struct; >> +struct kimage; >> +extern struct paca_struct kexec_paca; >> +void kexec_copy_flush(struct kimage *image); >> + >> +/* pSeries hcall tracing */ >> +extern struct static_key hcall_tracepoint_key; >> +void __trace_hcall_entry(unsigned long opcode, unsigned long *args); >> +void __trace_hcall_exit(long opcode, unsigned long retval, >> + unsigned long *retbuf); >> +/* OPAL tracing */ >> +#ifdef HAVE_JUMP_LABEL >> +extern struct static_key opal_tracepoint_key; >> +#endif >> + >> +void __trace_opal_entry(unsigned long opcode, unsigned long *args); >> +void __trace_opal_exit(long opcode, unsigned long retval); >> + >> +/* VMX copying */ >> +int enter_vmx_usercopy(void); >> +int exit_vmx_usercopy(void); >> +int enter_vmx_copy(void); >> +void * exit_vmx_copy(void *dest); >> + >> +/* Traps */ >> +long machine_check_early(struct pt_regs *regs); >> +long hmi_exception_realmode(struct pt_regs *regs); >> +void SMIException(struct pt_regs *regs); >> +void handle_hmi_exception(struct pt_regs *regs); >> +void instruction_breakpoint_exception(struct pt_regs *regs); >> +void RunModeException(struct pt_regs *regs); >> +void __kprobes single_step_exception(struct pt_regs *regs); >> +void __kprobes program_check_exception(struct pt_regs *regs); >> +void alignment_exception(struct pt_regs *regs); >> +void StackOverflow(struct pt_regs *regs); >> +void nonrecoverable_exception(struct pt_regs *regs); >> +void kernel_fp_unavailable_exception(struct pt_regs *regs); >> +void altivec_unavailable_exception(struct pt_regs *regs); >> +void vsx_unavailable_exception(struct pt_regs *regs); >> +void fp_unavailable_tm(struct pt_regs *regs); >> +void altivec_unavailable_tm(struct pt_regs *regs); >> +void vsx_unavailable_tm(struct pt_regs *regs); >> +void facility_unavailable_exception(struct pt_regs *regs); >> +void TAUException(struct pt_regs *regs); >> +void altivec_assist_exception(struct pt_regs *regs); >> +void unrecoverable_exception(struct pt_regs *regs); >> +void kernel_bad_stack(struct pt_regs *regs); >> +void system_reset_exception(struct pt_regs *regs); >> +void machine_check_exception(struct pt_regs *regs); >> +void __kprobes emulation_assist_interrupt(struct pt_regs *regs); >> diff --git a/arch/powerpc/kernel/machine_kexec_64.c >> b/arch/powerpc/kernel/machine_kexec_64.c >> index b8c202d63ecb..50bf55135ef8 100644 >> --- a/arch/powerpc/kernel/machine_kexec_64.c >> +++ b/arch/powerpc/kernel/machine_kexec_64.c >> @@ -29,6 +29,7 @@ >> #include <asm/prom.h> >> #include <asm/smp.h> >> #include <asm/hw_breakpoint.h> >> +#include <asm/asm-prototypes.h> >> >> #ifdef CONFIG_PPC_BOOK3E >> int default_machine_kexec_prepare(struct kimage *image) >> diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c >> index 55c924b65f71..f1adc3c4f4ca 100644 >> --- a/arch/powerpc/kernel/smp.c >> +++ b/arch/powerpc/kernel/smp.c >> @@ -53,6 +53,7 @@ >> #include <asm/vdso.h> >> #include <asm/debug.h> >> #include <asm/kexec.h> >> +#include <asm/asm-prototypes.h> >> >> #ifdef DEBUG >> #include <asm/udbg.h> >> diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c >> index 9229ba63c370..11d15e7270e0 100644 >> --- a/arch/powerpc/kernel/traps.c >> +++ b/arch/powerpc/kernel/traps.c >> @@ -60,6 +60,7 @@ >> #include <asm/switch_to.h> >> #include <asm/tm.h> >> #include <asm/debug.h> >> +#include <asm/asm-prototypes.h> >> #include <sysdev/fsl_pci.h> >> >> #if defined(CONFIG_DEBUGGER) || defined(CONFIG_KEXEC) >> diff --git a/arch/powerpc/lib/vmx-helper.c b/arch/powerpc/lib/vmx-helper.c >> index b27e030fc9f8..bf925cdcaca9 100644 >> --- a/arch/powerpc/lib/vmx-helper.c >> +++ b/arch/powerpc/lib/vmx-helper.c >> @@ -21,6 +21,7 @@ >> #include <linux/uaccess.h> >> #include <linux/hardirq.h> >> #include <asm/switch_to.h> >> +#include <asm/asm-prototypes.h> >> >> int enter_vmx_usercopy(void) >> { >> diff --git a/arch/powerpc/platforms/powernv/opal-tracepoints.c >> b/arch/powerpc/platforms/powernv/opal-tracepoints.c >> index e11273b2386d..1e496b780efd 100644 >> --- a/arch/powerpc/platforms/powernv/opal-tracepoints.c >> +++ b/arch/powerpc/platforms/powernv/opal-tracepoints.c >> @@ -1,6 +1,7 @@ >> #include <linux/percpu.h> >> #include <linux/jump_label.h> >> #include <asm/trace.h> >> +#include <asm/asm-prototypes.h> >> >> #ifdef HAVE_JUMP_LABEL >> struct static_key opal_tracepoint_key = STATIC_KEY_INIT; >> diff --git a/arch/powerpc/platforms/pseries/lpar.c >> b/arch/powerpc/platforms/pseries/lpar.c >> index 7f6100d91b4b..03ff9867a610 100644 >> --- a/arch/powerpc/platforms/pseries/lpar.c >> +++ b/arch/powerpc/platforms/pseries/lpar.c >> @@ -45,6 +45,7 @@ >> #include <asm/plpar_wrappers.h> >> #include <asm/kexec.h> >> #include <asm/fadump.h> >> +#include <asm/asm-prototypes.h> >> >> #include "pseries.h" >> >>