2022-04-22 22:59:45

by Donghai Qiao

[permalink] [raw]
Subject: [PATCH v2 11/11] smp: modify up.c to adopt the same format of cross CPU call.

Since smp.c has been changed to use the new interface, up.c should
be changed to use the uniprocessor version of cross call as well.

Signed-off-by: Donghai Qiao <[email protected]>
---
v1 -> v2: removed 'x' from the function names and change XCALL to SMP_CALL from the new macros

kernel/up.c | 56 +++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 42 insertions(+), 14 deletions(-)

diff --git a/kernel/up.c b/kernel/up.c
index a38b8b095251..b442e011a059 100644
--- a/kernel/up.c
+++ b/kernel/up.c
@@ -9,8 +9,7 @@
#include <linux/smp.h>
#include <linux/hypervisor.h>

-int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
- int wait)
+int smp_call(int cpu, void (*func) (void *info), void *info, unsigned int type)
{
unsigned long flags;

@@ -23,37 +22,66 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info,

return 0;
}
-EXPORT_SYMBOL(smp_call_function_single);
+EXPORT_SYMBOL(smp_call);

-int smp_call_function_single_async(int cpu, struct __call_single_data *csd)
+int smp_call_cond(int cpu, smp_call_func_t func, void *info,
+ smp_cond_func_t cond_func, unsigned int type)
+{
+ int ret = 0;
+
+ preempt_disable();
+ if (!cond_func || cond_func(0, info))
+ ret = smp_call(cpu, func, info, type);
+
+ preempt_enable();
+
+ return ret;
+}
+EXPORT_SYMBOL(smp_call_cond);
+
+void smp_call_mask(const struct cpumask *mask, smp_call_func_t func, void *info, unsigned int type)
{
unsigned long flags;

- local_irq_save(flags);
- csd->func(csd->info);
- local_irq_restore(flags);
+ if (!cpumask_test_cpu(0, mask))
+ return;
+
+ preempt_disable();
+ smp_call(cpu, func, info, type);
+ preempt_enable();
+}
+EXPORT_SYMBOL(smp_call_mask);
+
+int smp_call_private(int cpu, struct __call_single_data *csd, unsigned int type)
+{
+ preempt_disable();
+
+ if (csd->func != NULL)
+ smp_call(cpu, csd->func, csd->info, type);
+
+ preempt_enable();
+
return 0;
}
-EXPORT_SYMBOL(smp_call_function_single_async);
+EXPORT_SYMBOL(smp_call_private);

/*
* Preemption is disabled here to make sure the cond_func is called under the
* same conditions in UP and SMP.
*/
-void on_each_cpu_cond_mask(smp_cond_func_t cond_func, smp_call_func_t func,
- void *info, bool wait, const struct cpumask *mask)
+void smp_call_mask_cond(const struct cpumask *mask, smp_call_func_t func,
+ void *info, smp_cond_func_t cond_func,
+ unsigned int type)
{
unsigned long flags;

preempt_disable();
if ((!cond_func || cond_func(0, info)) && cpumask_test_cpu(0, mask)) {
- local_irq_save(flags);
- func(info);
- local_irq_restore(flags);
+ smp_call(cpu, func, info, type);
}
preempt_enable();
}
-EXPORT_SYMBOL(on_each_cpu_cond_mask);
+EXPORT_SYMBOL(smp_call_mask_cond);

int smp_call_on_cpu(unsigned int cpu, int (*func)(void *), void *par, bool phys)
{
--
2.27.0


2022-04-23 08:51:00

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2 11/11] smp: modify up.c to adopt the same format of cross CPU call.

Hi Donghai,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on rafael-pm/linux-next linus/master v5.18-rc3]
[cannot apply to tip/x86/core next-20220422]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/intel-lab-lkp/linux/commits/Donghai-Qiao/smp-cross-CPU-call-interface/20220423-060436
base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: i386-randconfig-a015 (https://download.01.org/0day-ci/archive/20220423/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 5bd87350a5ae429baf8f373cb226a57b62f87280)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/655b898028ef1555f6bec036db8d4681b551aaa8
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Donghai-Qiao/smp-cross-CPU-call-interface/20220423-060436
git checkout 655b898028ef1555f6bec036db8d4681b551aaa8
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

>> kernel/up.c:50:11: error: use of undeclared identifier 'cpu'
smp_call(cpu, func, info, type);
^
kernel/up.c:80:12: error: use of undeclared identifier 'cpu'
smp_call(cpu, func, info, type);
^
2 errors generated.


vim +/cpu +50 kernel/up.c

41
42 void smp_call_mask(const struct cpumask *mask, smp_call_func_t func, void *info, unsigned int type)
43 {
44 unsigned long flags;
45
46 if (!cpumask_test_cpu(0, mask))
47 return;
48
49 preempt_disable();
> 50 smp_call(cpu, func, info, type);
51 preempt_enable();
52 }
53 EXPORT_SYMBOL(smp_call_mask);
54

--
0-DAY CI Kernel Test Service
https://01.org/lkp

2022-04-23 16:22:36

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2 11/11] smp: modify up.c to adopt the same format of cross CPU call.

Hi Donghai,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on rafael-pm/linux-next linus/master v5.18-rc3]
[cannot apply to tip/x86/core next-20220422]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/intel-lab-lkp/linux/commits/Donghai-Qiao/smp-cross-CPU-call-interface/20220423-060436
base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: x86_64-randconfig-a013 (https://download.01.org/0day-ci/archive/20220423/[email protected]/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
reproduce (this is a W=1 build):
# https://github.com/intel-lab-lkp/linux/commit/655b898028ef1555f6bec036db8d4681b551aaa8
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Donghai-Qiao/smp-cross-CPU-call-interface/20220423-060436
git checkout 655b898028ef1555f6bec036db8d4681b551aaa8
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

kernel/up.c: In function 'smp_call_mask':
>> kernel/up.c:50:18: error: 'cpu' undeclared (first use in this function); did you mean 'fpu'?
50 | smp_call(cpu, func, info, type);
| ^~~
| fpu
kernel/up.c:50:18: note: each undeclared identifier is reported only once for each function it appears in
kernel/up.c:44:23: warning: unused variable 'flags' [-Wunused-variable]
44 | unsigned long flags;
| ^~~~~
kernel/up.c: In function 'smp_call_mask_cond':
kernel/up.c:80:26: error: 'cpu' undeclared (first use in this function); did you mean 'fpu'?
80 | smp_call(cpu, func, info, type);
| ^~~
| fpu
kernel/up.c:76:23: warning: unused variable 'flags' [-Wunused-variable]
76 | unsigned long flags;
| ^~~~~
In file included from include/linux/percpu.h:7,
from include/linux/context_tracking_state.h:5,
from include/linux/hardirq.h:5,
from include/linux/interrupt.h:11,
from kernel/up.c:6:
At top level:
include/linux/smp.h:131:14: warning: 'seq_type' defined but not used [-Wunused-variable]
131 | static char *seq_type[] = {
| ^~~~~~~~


vim +50 kernel/up.c

41
42 void smp_call_mask(const struct cpumask *mask, smp_call_func_t func, void *info, unsigned int type)
43 {
44 unsigned long flags;
45
46 if (!cpumask_test_cpu(0, mask))
47 return;
48
49 preempt_disable();
> 50 smp_call(cpu, func, info, type);
51 preempt_enable();
52 }
53 EXPORT_SYMBOL(smp_call_mask);
54

--
0-DAY CI Kernel Test Service
https://01.org/lkp