2023-10-14 16:14:36

by Alexey Dobriyan

[permalink] [raw]
Subject: [PATCH] smp: fix __smp_processor_id() backup macro

Every __smp_processor_id usage doesn't have arguments and
every raw_smp_processor_id usage doesn't have arguments,
therefore "#define __smp_processor_id(x)" can not possibly work.

Signed-off-by: Alexey Dobriyan <[email protected]>
---

include/linux/smp.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -261,7 +261,7 @@ static inline int get_boot_cpu_id(void)
* regular asm read for the stable.
*/
#ifndef __smp_processor_id
-#define __smp_processor_id(x) raw_smp_processor_id(x)
+#define __smp_processor_id() raw_smp_processor_id()
#endif

#ifdef CONFIG_DEBUG_PREEMPT


2023-10-14 22:12:45

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] smp: fix __smp_processor_id() backup macro

On Sat, 14 Oct 2023 19:14:15 +0300 Alexey Dobriyan <[email protected]> wrote:

> Every __smp_processor_id usage doesn't have arguments and
> every raw_smp_processor_id usage doesn't have arguments,
> therefore "#define __smp_processor_id(x)" can not possibly work.
>
> ...
>
> --- a/include/linux/smp.h
> +++ b/include/linux/smp.h
> @@ -261,7 +261,7 @@ static inline int get_boot_cpu_id(void)
> * regular asm read for the stable.
> */
> #ifndef __smp_processor_id
> -#define __smp_processor_id(x) raw_smp_processor_id(x)
> +#define __smp_processor_id() raw_smp_processor_id()
> #endif
>

It's been that way for at least 4 years. Presumably this is never used
and should be removed?

2023-10-15 10:01:28

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [PATCH] smp: fix __smp_processor_id() backup macro

On Sat, Oct 14, 2023 at 03:12:21PM -0700, Andrew Morton wrote:
> On Sat, 14 Oct 2023 19:14:15 +0300 Alexey Dobriyan <[email protected]> wrote:
>
> > Every __smp_processor_id usage doesn't have arguments and
> > every raw_smp_processor_id usage doesn't have arguments,
> > therefore "#define __smp_processor_id(x)" can not possibly work.
> >
> > ...
> >
> > --- a/include/linux/smp.h
> > +++ b/include/linux/smp.h
> > @@ -261,7 +261,7 @@ static inline int get_boot_cpu_id(void)
> > * regular asm read for the stable.
> > */
> > #ifndef __smp_processor_id
> > -#define __smp_processor_id(x) raw_smp_processor_id(x)
> > +#define __smp_processor_id() raw_smp_processor_id()
> > #endif
> >
>
> It's been that way for at least 4 years. Presumably this is never used
> and should be removed?

Deleting breaks compilation immediately.

C89 6.8.3 §4 says

"The number of arguments in an invocation of a function-like
macro shall agree with the number of parameters in the macro
definition, ..."

C99 relaxes this in 6.10.3 §4

the number of arguments (including those arguments
consisting of no preprocesing tokens) ... shall equal
the number of parameters in the macro definition.

So, "#define M()" works with M() only, but "#define M(a)" worked with
M(1) and started working as M() which is very funny.

In other words changelog is wrong: it can and does work (sort of by
accident).