[PATCH 2/4] powerpc: Introduce asm-prototypes.h

Daniel Axtens dja at axtens.net
Fri Aug 14 19:53:00 AEST 2020


Christophe Leroy <christophe.leroy at 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 <dja at 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 <dja at 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"
>>   
>> 


More information about the Linuxppc-dev mailing list