Message ID | 20200627150428.2525192-2-npiggin@gmail.com |
---|---|
State | Not Applicable |
Headers | show |
Series | powerpc/pseries: IPI doorbell improvements | expand |
Hi Nicholas, I love your patch! Yet something to improve: [auto build test ERROR on powerpc/next] [also build test ERROR on scottwood/next v5.8-rc2 next-20200626] [cannot apply to kvm-ppc/kvm-ppc-next] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Nicholas-Piggin/powerpc-pseries-IPI-doorbell-improvements/20200627-230544 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next config: powerpc-randconfig-c003-20200628 (attached as .config) compiler: powerpc64-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All error/warnings (new ones prefixed by >>): In file included from arch/powerpc/kernel/asm-offsets.c:38: arch/powerpc/include/asm/dbell.h: In function 'doorbell_global_ipi': >> arch/powerpc/include/asm/dbell.h:114:12: error: implicit declaration of function 'get_hard_smp_processor_id'; did you mean 'raw_smp_processor_id'? [-Werror=implicit-function-declaration] 114 | u32 tag = get_hard_smp_processor_id(cpu); | ^~~~~~~~~~~~~~~~~~~~~~~~~ | raw_smp_processor_id arch/powerpc/include/asm/dbell.h: In function 'doorbell_try_core_ipi': >> arch/powerpc/include/asm/dbell.h:146:28: error: implicit declaration of function 'cpu_sibling_mask'; did you mean 'cpu_online_mask'? [-Werror=implicit-function-declaration] 146 | if (cpumask_test_cpu(cpu, cpu_sibling_mask(this_cpu))) { | ^~~~~~~~~~~~~~~~ | cpu_online_mask >> arch/powerpc/include/asm/dbell.h:146:28: warning: passing argument 2 of 'cpumask_test_cpu' makes pointer from integer without a cast [-Wint-conversion] 146 | if (cpumask_test_cpu(cpu, cpu_sibling_mask(this_cpu))) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~ | | | int In file included from include/linux/workqueue.h:15, from include/linux/rhashtable-types.h:15, from include/linux/ipc.h:7, from include/uapi/linux/sem.h:5, from include/linux/sem.h:5, from include/linux/compat.h:14, from arch/powerpc/kernel/asm-offsets.c:14: include/linux/cpumask.h:365:67: note: expected 'const struct cpumask *' but argument is of type 'int' 365 | static inline int cpumask_test_cpu(int cpu, const struct cpumask *cpumask) | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~ cc1: some warnings being treated as errors make[2]: *** [scripts/Makefile.build:114: arch/powerpc/kernel/asm-offsets.s] Error 1 make[2]: Target '__build' not remade because of errors. make[1]: *** [Makefile:1175: prepare0] Error 2 make[1]: Target 'prepare' not remade because of errors. make: *** [Makefile:185: __sub-make] Error 2 make: Target 'prepare' not remade because of errors. vim +114 arch/powerpc/include/asm/dbell.h 100 101 /* 102 * Doorbells must only be used if CPU_FTR_DBELL is available. 103 * msgsnd is used in HV, and msgsndp is used in !HV. 104 * 105 * These should be used by platform code that is aware of restrictions. 106 * Other arch code should use ->cause_ipi. 107 * 108 * doorbell_global_ipi() sends a dbell to any target CPU. 109 * Must be used only by architectures that address msgsnd target 110 * by PIR/get_hard_smp_processor_id. 111 */ 112 static inline void doorbell_global_ipi(int cpu) 113 { > 114 u32 tag = get_hard_smp_processor_id(cpu); 115 116 kvmppc_set_host_ipi(cpu); 117 /* Order previous accesses vs. msgsnd, which is treated as a store */ 118 ppc_msgsnd_sync(); 119 ppc_msgsnd(PPC_DBELL_MSGTYPE, 0, tag); 120 } 121 122 /* 123 * doorbell_core_ipi() sends a dbell to a target CPU in the same core. 124 * Must be used only by architectures that address msgsnd target 125 * by TIR/cpu_thread_in_core. 126 */ 127 static inline void doorbell_core_ipi(int cpu) 128 { 129 u32 tag = cpu_thread_in_core(cpu); 130 131 kvmppc_set_host_ipi(cpu); 132 /* Order previous accesses vs. msgsnd, which is treated as a store */ 133 ppc_msgsnd_sync(); 134 ppc_msgsnd(PPC_DBELL_MSGTYPE, 0, tag); 135 } 136 137 /* 138 * Attempt to cause a core doorbell if destination is on the same core. 139 * Returns 1 on success, 0 on failure. 140 */ 141 static inline int doorbell_try_core_ipi(int cpu) 142 { 143 int this_cpu = get_cpu(); 144 int ret = 0; 145 > 146 if (cpumask_test_cpu(cpu, cpu_sibling_mask(this_cpu))) { 147 doorbell_core_ipi(cpu); 148 ret = 1; 149 } 150 151 put_cpu(); 152 153 return ret; 154 } 155 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
kernel test robot <lkp@intel.com> writes: > Hi Nicholas, > > I love your patch! Yet something to improve: > > [auto build test ERROR on powerpc/next] > [also build test ERROR on scottwood/next v5.8-rc2 next-20200626] > [cannot apply to kvm-ppc/kvm-ppc-next] > [If your patch is applied to the wrong git tree, kindly drop us a note. > And when submitting patch, we suggest to use as documented in > https://git-scm.com/docs/git-format-patch] > > url: https://github.com/0day-ci/linux/commits/Nicholas-Piggin/powerpc-pseries-IPI-doorbell-improvements/20200627-230544 > base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next > config: powerpc-randconfig-c003-20200628 (attached as .config) > compiler: powerpc64-linux-gcc (GCC) 9.3.0 > If you fix the issue, kindly add following tag as appropriate > Reported-by: kernel test robot <lkp@intel.com> > > All error/warnings (new ones prefixed by >>): > > In file included from arch/powerpc/kernel/asm-offsets.c:38: > arch/powerpc/include/asm/dbell.h: In function 'doorbell_global_ipi': >>> arch/powerpc/include/asm/dbell.h:114:12: error: implicit declaration of function 'get_hard_smp_processor_id'; did you mean 'raw_smp_processor_id'? [-Werror=implicit-function-declaration] > 114 | u32 tag = get_hard_smp_processor_id(cpu); > | ^~~~~~~~~~~~~~~~~~~~~~~~~ > | raw_smp_processor_id > arch/powerpc/include/asm/dbell.h: In function 'doorbell_try_core_ipi': >>> arch/powerpc/include/asm/dbell.h:146:28: error: implicit declaration of function 'cpu_sibling_mask'; did you mean 'cpu_online_mask'? [-Werror=implicit-function-declaration] > 146 | if (cpumask_test_cpu(cpu, cpu_sibling_mask(this_cpu))) { > | ^~~~~~~~~~~~~~~~ > | cpu_online_mask >>> arch/powerpc/include/asm/dbell.h:146:28: warning: passing argument 2 of 'cpumask_test_cpu' makes pointer from integer without a cast [-Wint-conversion] > 146 | if (cpumask_test_cpu(cpu, cpu_sibling_mask(this_cpu))) { > | ^~~~~~~~~~~~~~~~~~~~~~~~~~ Seems like CONFIG_SMP=n is probably the root cause. You could try including asm/smp.h, but good chance that will lead to header soup. Other option would be to wrap the whole lot in #ifdef CONFIG_SMP? cheers
Excerpts from Michael Ellerman's message of June 30, 2020 11:31 am: > kernel test robot <lkp@intel.com> writes: >> Hi Nicholas, >> >> I love your patch! Yet something to improve: >> >> [auto build test ERROR on powerpc/next] >> [also build test ERROR on scottwood/next v5.8-rc2 next-20200626] >> [cannot apply to kvm-ppc/kvm-ppc-next] >> [If your patch is applied to the wrong git tree, kindly drop us a note. >> And when submitting patch, we suggest to use as documented in >> https://git-scm.com/docs/git-format-patch] >> >> url: https://github.com/0day-ci/linux/commits/Nicholas-Piggin/powerpc-pseries-IPI-doorbell-improvements/20200627-230544 >> base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next >> config: powerpc-randconfig-c003-20200628 (attached as .config) >> compiler: powerpc64-linux-gcc (GCC) 9.3.0 > >> If you fix the issue, kindly add following tag as appropriate >> Reported-by: kernel test robot <lkp@intel.com> >> >> All error/warnings (new ones prefixed by >>): >> >> In file included from arch/powerpc/kernel/asm-offsets.c:38: >> arch/powerpc/include/asm/dbell.h: In function 'doorbell_global_ipi': >>>> arch/powerpc/include/asm/dbell.h:114:12: error: implicit declaration of function 'get_hard_smp_processor_id'; did you mean 'raw_smp_processor_id'? [-Werror=implicit-function-declaration] >> 114 | u32 tag = get_hard_smp_processor_id(cpu); >> | ^~~~~~~~~~~~~~~~~~~~~~~~~ >> | raw_smp_processor_id >> arch/powerpc/include/asm/dbell.h: In function 'doorbell_try_core_ipi': >>>> arch/powerpc/include/asm/dbell.h:146:28: error: implicit declaration of function 'cpu_sibling_mask'; did you mean 'cpu_online_mask'? [-Werror=implicit-function-declaration] >> 146 | if (cpumask_test_cpu(cpu, cpu_sibling_mask(this_cpu))) { >> | ^~~~~~~~~~~~~~~~ >> | cpu_online_mask >>>> arch/powerpc/include/asm/dbell.h:146:28: warning: passing argument 2 of 'cpumask_test_cpu' makes pointer from integer without a cast [-Wint-conversion] >> 146 | if (cpumask_test_cpu(cpu, cpu_sibling_mask(this_cpu))) { >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~ > > Seems like CONFIG_SMP=n is probably the root cause. > > You could try including asm/smp.h, but good chance that will lead to > header soup. Possibly. dbell.h shouldn't be included by much, but maybe it gets dragged in. > > Other option would be to wrap the whole lot in #ifdef CONFIG_SMP? Yeah that might be a better idea. I'll fix it up and repost if there's no strong objections to the KVM detection bit. Thanks, Nick
diff --git a/arch/powerpc/include/asm/dbell.h b/arch/powerpc/include/asm/dbell.h index 4ce6808deed3..5c9625e5070b 100644 --- a/arch/powerpc/include/asm/dbell.h +++ b/arch/powerpc/include/asm/dbell.h @@ -13,6 +13,7 @@ #include <asm/ppc-opcode.h> #include <asm/feature-fixups.h> +#include <asm/kvm_ppc.h> #define PPC_DBELL_MSG_BRDCAST (0x04000000) #define PPC_DBELL_TYPE(x) (((x) & 0xf) << (63-36)) @@ -87,9 +88,6 @@ static inline void ppc_msgsync(void) #endif /* CONFIG_PPC_BOOK3S */ -extern void doorbell_global_ipi(int cpu); -extern void doorbell_core_ipi(int cpu); -extern int doorbell_try_core_ipi(int cpu); extern void doorbell_exception(struct pt_regs *regs); static inline void ppc_msgsnd(enum ppc_dbell type, u32 flags, u32 tag) @@ -100,4 +98,59 @@ static inline void ppc_msgsnd(enum ppc_dbell type, u32 flags, u32 tag) _ppc_msgsnd(msg); } +/* + * Doorbells must only be used if CPU_FTR_DBELL is available. + * msgsnd is used in HV, and msgsndp is used in !HV. + * + * These should be used by platform code that is aware of restrictions. + * Other arch code should use ->cause_ipi. + * + * doorbell_global_ipi() sends a dbell to any target CPU. + * Must be used only by architectures that address msgsnd target + * by PIR/get_hard_smp_processor_id. + */ +static inline void doorbell_global_ipi(int cpu) +{ + u32 tag = get_hard_smp_processor_id(cpu); + + kvmppc_set_host_ipi(cpu); + /* Order previous accesses vs. msgsnd, which is treated as a store */ + ppc_msgsnd_sync(); + ppc_msgsnd(PPC_DBELL_MSGTYPE, 0, tag); +} + +/* + * doorbell_core_ipi() sends a dbell to a target CPU in the same core. + * Must be used only by architectures that address msgsnd target + * by TIR/cpu_thread_in_core. + */ +static inline void doorbell_core_ipi(int cpu) +{ + u32 tag = cpu_thread_in_core(cpu); + + kvmppc_set_host_ipi(cpu); + /* Order previous accesses vs. msgsnd, which is treated as a store */ + ppc_msgsnd_sync(); + ppc_msgsnd(PPC_DBELL_MSGTYPE, 0, tag); +} + +/* + * Attempt to cause a core doorbell if destination is on the same core. + * Returns 1 on success, 0 on failure. + */ +static inline int doorbell_try_core_ipi(int cpu) +{ + int this_cpu = get_cpu(); + int ret = 0; + + if (cpumask_test_cpu(cpu, cpu_sibling_mask(this_cpu))) { + doorbell_core_ipi(cpu); + ret = 1; + } + + put_cpu(); + + return ret; +} + #endif /* _ASM_POWERPC_DBELL_H */ diff --git a/arch/powerpc/kernel/dbell.c b/arch/powerpc/kernel/dbell.c index f17ff1200eaa..52680cf07c9d 100644 --- a/arch/powerpc/kernel/dbell.c +++ b/arch/powerpc/kernel/dbell.c @@ -18,61 +18,6 @@ #ifdef CONFIG_SMP -/* - * Doorbells must only be used if CPU_FTR_DBELL is available. - * msgsnd is used in HV, and msgsndp is used in !HV. - * - * These should be used by platform code that is aware of restrictions. - * Other arch code should use ->cause_ipi. - * - * doorbell_global_ipi() sends a dbell to any target CPU. - * Must be used only by architectures that address msgsnd target - * by PIR/get_hard_smp_processor_id. - */ -void doorbell_global_ipi(int cpu) -{ - u32 tag = get_hard_smp_processor_id(cpu); - - kvmppc_set_host_ipi(cpu); - /* Order previous accesses vs. msgsnd, which is treated as a store */ - ppc_msgsnd_sync(); - ppc_msgsnd(PPC_DBELL_MSGTYPE, 0, tag); -} - -/* - * doorbell_core_ipi() sends a dbell to a target CPU in the same core. - * Must be used only by architectures that address msgsnd target - * by TIR/cpu_thread_in_core. - */ -void doorbell_core_ipi(int cpu) -{ - u32 tag = cpu_thread_in_core(cpu); - - kvmppc_set_host_ipi(cpu); - /* Order previous accesses vs. msgsnd, which is treated as a store */ - ppc_msgsnd_sync(); - ppc_msgsnd(PPC_DBELL_MSGTYPE, 0, tag); -} - -/* - * Attempt to cause a core doorbell if destination is on the same core. - * Returns 1 on success, 0 on failure. - */ -int doorbell_try_core_ipi(int cpu) -{ - int this_cpu = get_cpu(); - int ret = 0; - - if (cpumask_test_cpu(cpu, cpu_sibling_mask(this_cpu))) { - doorbell_core_ipi(cpu); - ret = 1; - } - - put_cpu(); - - return ret; -} - void doorbell_exception(struct pt_regs *regs) { struct pt_regs *old_regs = set_irq_regs(regs);
These are only called in one place for a given platform, so inline them for performance. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- arch/powerpc/include/asm/dbell.h | 59 ++++++++++++++++++++++++++++++-- arch/powerpc/kernel/dbell.c | 55 ----------------------------- 2 files changed, 56 insertions(+), 58 deletions(-)