linux-trace-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
@ 2023-10-24 14:52 Masami Hiramatsu (Google)
  2023-10-24 15:08 ` Mark Rutland
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Masami Hiramatsu (Google) @ 2023-10-24 14:52 UTC (permalink / raw)
  To: Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
  Cc: wuqiang . matt, Mark Rutland, Peter Zijlstra, mhiramat, linux-sh,
	linux-kernel, linux-trace-kernel

From: Masami Hiramatsu (Google) <mhiramat@kernel.org>

Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
in SH architecture because it does not implement arch_cmpxchg_local().

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202310241310.Ir5uukOG-lkp@intel.com/
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
---
 arch/sh/include/asm/cmpxchg.h |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h
index 288f6f38d98f..e920e61fb817 100644
--- a/arch/sh/include/asm/cmpxchg.h
+++ b/arch/sh/include/asm/cmpxchg.h
@@ -71,4 +71,6 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
 				    (unsigned long)_n_, sizeof(*(ptr))); \
   })
 
+#include <asm-generic/cmpxchg-local.h>
+
 #endif /* __ASM_SH_CMPXCHG_H */


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-24 14:52 [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local() Masami Hiramatsu (Google)
@ 2023-10-24 15:08 ` Mark Rutland
  2023-10-24 23:42   ` Masami Hiramatsu
  2023-10-24 16:43 ` John Paul Adrian Glaubitz
  2023-10-25 11:26 ` [External] " wuqiang.matt
  2 siblings, 1 reply; 12+ messages in thread
From: Mark Rutland @ 2023-10-24 15:08 UTC (permalink / raw)
  To: Masami Hiramatsu (Google)
  Cc: Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz,
	wuqiang . matt, Peter Zijlstra, linux-sh, linux-kernel,
	linux-trace-kernel

On Tue, Oct 24, 2023 at 11:52:54PM +0900, Masami Hiramatsu (Google) wrote:
> From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> 
> Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
> in SH architecture because it does not implement arch_cmpxchg_local().

I do not think this is correct.

The implementation in <asm-generic/cmpxchg-local.h> is UP-only (and it only
disables interrupts), whereas arch/sh can be built SMP. We should probably add
some guards into <asm-generic/cmpxchg-local.h> for that as we have in
<asm-generic/cmpxchg.h>.

I think the right thing to do here is to define arch_cmpxchg_local() in terms
of arch_cmpxchg(), i.e. at the bottom of arch/sh's <asm/cmpxchg.h> add:

#define arch_cmpxchg_local              arch_cmpxchg

Mark.

> 
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202310241310.Ir5uukOG-lkp@intel.com/
> Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> ---
>  arch/sh/include/asm/cmpxchg.h |    2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h
> index 288f6f38d98f..e920e61fb817 100644
> --- a/arch/sh/include/asm/cmpxchg.h
> +++ b/arch/sh/include/asm/cmpxchg.h
> @@ -71,4 +71,6 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
>  				    (unsigned long)_n_, sizeof(*(ptr))); \
>    })
>  
> +#include <asm-generic/cmpxchg-local.h>
> +
>  #endif /* __ASM_SH_CMPXCHG_H */
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-24 14:52 [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local() Masami Hiramatsu (Google)
  2023-10-24 15:08 ` Mark Rutland
@ 2023-10-24 16:43 ` John Paul Adrian Glaubitz
  2023-10-25 11:26 ` [External] " wuqiang.matt
  2 siblings, 0 replies; 12+ messages in thread
From: John Paul Adrian Glaubitz @ 2023-10-24 16:43 UTC (permalink / raw)
  To: Masami Hiramatsu (Google), Yoshinori Sato, Rich Felker
  Cc: wuqiang . matt, Mark Rutland, Peter Zijlstra, linux-sh,
	linux-kernel, linux-trace-kernel

On Tue, 2023-10-24 at 23:52 +0900, Masami Hiramatsu (Google) wrote:
> From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> 
> Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
> in SH architecture because it does not implement arch_cmpxchg_local().
> 
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202310241310.Ir5uukOG-lkp@intel.com/
> Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> ---
>  arch/sh/include/asm/cmpxchg.h |    2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h
> index 288f6f38d98f..e920e61fb817 100644
> --- a/arch/sh/include/asm/cmpxchg.h
> +++ b/arch/sh/include/asm/cmpxchg.h
> @@ -71,4 +71,6 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
>  				    (unsigned long)_n_, sizeof(*(ptr))); \
>    })
>  
> +#include <asm-generic/cmpxchg-local.h>
> +
>  #endif /* __ASM_SH_CMPXCHG_H */

Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer
`. `'   Physicist
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-24 15:08 ` Mark Rutland
@ 2023-10-24 23:42   ` Masami Hiramatsu
  2023-10-25  1:51     ` wuqiang.matt
  2023-10-25 10:30     ` Mark Rutland
  0 siblings, 2 replies; 12+ messages in thread
From: Masami Hiramatsu @ 2023-10-24 23:42 UTC (permalink / raw)
  To: Mark Rutland
  Cc: Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz,
	wuqiang . matt, Peter Zijlstra, linux-sh, linux-kernel,
	linux-trace-kernel

On Tue, 24 Oct 2023 16:08:12 +0100
Mark Rutland <mark.rutland@arm.com> wrote:

> On Tue, Oct 24, 2023 at 11:52:54PM +0900, Masami Hiramatsu (Google) wrote:
> > From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > 
> > Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
> > in SH architecture because it does not implement arch_cmpxchg_local().
> 
> I do not think this is correct.
> 
> The implementation in <asm-generic/cmpxchg-local.h> is UP-only (and it only
> disables interrupts), whereas arch/sh can be built SMP. We should probably add
> some guards into <asm-generic/cmpxchg-local.h> for that as we have in
> <asm-generic/cmpxchg.h>.

Isn't cmpxchg_local for the data which only needs to ensure to do cmpxchg
on local CPU?

So I think it doesn't care about the other CPUs (IOW, it should not touched by
other CPUs), so it only considers UP case. E.g. on x86, arch_cmpxchg_local() is
defined as raw "cmpxchg" without lock prefix.

#define __cmpxchg_local(ptr, old, new, size)                            \
        __raw_cmpxchg((ptr), (old), (new), (size), "")


Thank you,


> 
> I think the right thing to do here is to define arch_cmpxchg_local() in terms
> of arch_cmpxchg(), i.e. at the bottom of arch/sh's <asm/cmpxchg.h> add:
> 
> #define arch_cmpxchg_local              arch_cmpxchg
> 
> Mark.
> 
> > 
> > Reported-by: kernel test robot <lkp@intel.com>
> > Closes: https://lore.kernel.org/oe-kbuild-all/202310241310.Ir5uukOG-lkp@intel.com/
> > Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > ---
> >  arch/sh/include/asm/cmpxchg.h |    2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h
> > index 288f6f38d98f..e920e61fb817 100644
> > --- a/arch/sh/include/asm/cmpxchg.h
> > +++ b/arch/sh/include/asm/cmpxchg.h
> > @@ -71,4 +71,6 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
> >  				    (unsigned long)_n_, sizeof(*(ptr))); \
> >    })
> >  
> > +#include <asm-generic/cmpxchg-local.h>
> > +
> >  #endif /* __ASM_SH_CMPXCHG_H */
> > 


-- 
Masami Hiramatsu (Google) <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-24 23:42   ` Masami Hiramatsu
@ 2023-10-25  1:51     ` wuqiang.matt
  2023-10-25 11:06       ` wuqiang.matt
  2023-10-25 10:30     ` Mark Rutland
  1 sibling, 1 reply; 12+ messages in thread
From: wuqiang.matt @ 2023-10-25  1:51 UTC (permalink / raw)
  To: Masami Hiramatsu (Google), Mark Rutland
  Cc: Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz,
	Peter Zijlstra, linux-sh, linux-kernel, linux-trace-kernel

On 2023/10/25 07:42, Masami Hiramatsu (Google) wrote:
> On Tue, 24 Oct 2023 16:08:12 +0100
> Mark Rutland <mark.rutland@arm.com> wrote:
> 
>> On Tue, Oct 24, 2023 at 11:52:54PM +0900, Masami Hiramatsu (Google) wrote:
>>> From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
>>>
>>> Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
>>> in SH architecture because it does not implement arch_cmpxchg_local().
>>
>> I do not think this is correct.
>>
>> The implementation in <asm-generic/cmpxchg-local.h> is UP-only (and it only
>> disables interrupts), whereas arch/sh can be built SMP. We should probably add
>> some guards into <asm-generic/cmpxchg-local.h> for that as we have in
>> <asm-generic/cmpxchg.h>.
> 
> Isn't cmpxchg_local for the data which only needs to ensure to do cmpxchg
> on local CPU?

asm-generic/cmpxchg.h is only for UP, will throw an error for SMP building:

#ifdef CONFIG_SMP
#error "Cannot use generic cmpxchg on SMP"
#endif

SH arch seems it does have SMP systems. The arch/sh/include/asm/cmpxchg.h has
the following codes:

#if defined(CONFIG_GUSA_RB)
#include <asm/cmpxchg-grb.h>
#elif defined(CONFIG_CPU_SH4A)
#include <asm/cmpxchg-llsc.h>
#elif defined(CONFIG_CPU_J2) && defined(CONFIG_SMP)
#include <asm/cmpxchg-cas.h>
#else
#include <asm/cmpxchg-irq.h>
#endif

> So I think it doesn't care about the other CPUs (IOW, it should not touched by
> other CPUs), so it only considers UP case. E.g. on x86, arch_cmpxchg_local() is
> defined as raw "cmpxchg" without lock prefix.
> 
> #define __cmpxchg_local(ptr, old, new, size)                            \
>          __raw_cmpxchg((ptr), (old), (new), (size), "")
> 
> 
> Thank you,
> 
> 
>>
>> I think the right thing to do here is to define arch_cmpxchg_local() in terms
>> of arch_cmpxchg(), i.e. at the bottom of arch/sh's <asm/cmpxchg.h> add:
>>
>> #define arch_cmpxchg_local              arch_cmpxchg

I agree too. Might not be performance optimized but guarantees correctness.

>> Mark.
>>
>>>
>>> Reported-by: kernel test robot <lkp@intel.com>
>>> Closes: https://lore.kernel.org/oe-kbuild-all/202310241310.Ir5uukOG-lkp@intel.com/
>>> Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
>>> ---
>>>   arch/sh/include/asm/cmpxchg.h |    2 ++
>>>   1 file changed, 2 insertions(+)
>>>
>>> diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h
>>> index 288f6f38d98f..e920e61fb817 100644
>>> --- a/arch/sh/include/asm/cmpxchg.h
>>> +++ b/arch/sh/include/asm/cmpxchg.h
>>> @@ -71,4 +71,6 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
>>>   				    (unsigned long)_n_, sizeof(*(ptr))); \
>>>     })
>>>   
>>> +#include <asm-generic/cmpxchg-local.h>
>>> +
>>>   #endif /* __ASM_SH_CMPXCHG_H */
>>>
> 
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-24 23:42   ` Masami Hiramatsu
  2023-10-25  1:51     ` wuqiang.matt
@ 2023-10-25 10:30     ` Mark Rutland
  2023-10-25 10:32       ` John Paul Adrian Glaubitz
  1 sibling, 1 reply; 12+ messages in thread
From: Mark Rutland @ 2023-10-25 10:30 UTC (permalink / raw)
  To: Masami Hiramatsu
  Cc: Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz,
	wuqiang . matt, Peter Zijlstra, linux-sh, linux-kernel,
	linux-trace-kernel

On Wed, Oct 25, 2023 at 08:42:55AM +0900, Masami Hiramatsu wrote:
> On Tue, 24 Oct 2023 16:08:12 +0100
> Mark Rutland <mark.rutland@arm.com> wrote:
> 
> > On Tue, Oct 24, 2023 at 11:52:54PM +0900, Masami Hiramatsu (Google) wrote:
> > > From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > > 
> > > Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
> > > in SH architecture because it does not implement arch_cmpxchg_local().
> > 
> > I do not think this is correct.
> > 
> > The implementation in <asm-generic/cmpxchg-local.h> is UP-only (and it only
> > disables interrupts), whereas arch/sh can be built SMP. We should probably add
> > some guards into <asm-generic/cmpxchg-local.h> for that as we have in
> > <asm-generic/cmpxchg.h>.
> 
> Isn't cmpxchg_local for the data which only needs to ensure to do cmpxchg
> on local CPU?
> So I think it doesn't care about the other CPUs (IOW, it should not touched by
> other CPUs), so it only considers UP case. E.g. on x86, arch_cmpxchg_local() is
> defined as raw "cmpxchg" without lock prefix.
> 
> #define __cmpxchg_local(ptr, old, new, size)                            \
>         __raw_cmpxchg((ptr), (old), (new), (size), "")
> 

Yes, you're right; sorry for the noise.

For your original patch:

Acked-by: Mark Rutland <mark.rutland@arm.com>

Mark.

> 
> Thank you,
> 
> 
> > 
> > I think the right thing to do here is to define arch_cmpxchg_local() in terms
> > of arch_cmpxchg(), i.e. at the bottom of arch/sh's <asm/cmpxchg.h> add:
> > 
> > #define arch_cmpxchg_local              arch_cmpxchg
> > 
> > Mark.
> > 
> > > 
> > > Reported-by: kernel test robot <lkp@intel.com>
> > > Closes: https://lore.kernel.org/oe-kbuild-all/202310241310.Ir5uukOG-lkp@intel.com/
> > > Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > > ---
> > >  arch/sh/include/asm/cmpxchg.h |    2 ++
> > >  1 file changed, 2 insertions(+)
> > > 
> > > diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h
> > > index 288f6f38d98f..e920e61fb817 100644
> > > --- a/arch/sh/include/asm/cmpxchg.h
> > > +++ b/arch/sh/include/asm/cmpxchg.h
> > > @@ -71,4 +71,6 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
> > >  				    (unsigned long)_n_, sizeof(*(ptr))); \
> > >    })
> > >  
> > > +#include <asm-generic/cmpxchg-local.h>
> > > +
> > >  #endif /* __ASM_SH_CMPXCHG_H */
> > > 
> 
> 
> -- 
> Masami Hiramatsu (Google) <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-25 10:30     ` Mark Rutland
@ 2023-10-25 10:32       ` John Paul Adrian Glaubitz
  2023-10-25 13:16         ` Geert Uytterhoeven
  0 siblings, 1 reply; 12+ messages in thread
From: John Paul Adrian Glaubitz @ 2023-10-25 10:32 UTC (permalink / raw)
  To: Mark Rutland, Masami Hiramatsu
  Cc: Yoshinori Sato, Rich Felker, wuqiang . matt, Peter Zijlstra,
	linux-sh, linux-kernel, linux-trace-kernel, Geert Uytterhoeven

On Wed, 2023-10-25 at 11:30 +0100, Mark Rutland wrote:
> On Wed, Oct 25, 2023 at 08:42:55AM +0900, Masami Hiramatsu wrote:
> > On Tue, 24 Oct 2023 16:08:12 +0100
> > Mark Rutland <mark.rutland@arm.com> wrote:
> > 
> > > On Tue, Oct 24, 2023 at 11:52:54PM +0900, Masami Hiramatsu (Google) wrote:
> > > > From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > > > 
> > > > Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
> > > > in SH architecture because it does not implement arch_cmpxchg_local().
> > > 
> > > I do not think this is correct.
> > > 
> > > The implementation in <asm-generic/cmpxchg-local.h> is UP-only (and it only
> > > disables interrupts), whereas arch/sh can be built SMP. We should probably add
> > > some guards into <asm-generic/cmpxchg-local.h> for that as we have in
> > > <asm-generic/cmpxchg.h>.
> > 
> > Isn't cmpxchg_local for the data which only needs to ensure to do cmpxchg
> > on local CPU?
> > So I think it doesn't care about the other CPUs (IOW, it should not touched by
> > other CPUs), so it only considers UP case. E.g. on x86, arch_cmpxchg_local() is
> > defined as raw "cmpxchg" without lock prefix.
> > 
> > #define __cmpxchg_local(ptr, old, new, size)                            \
> >         __raw_cmpxchg((ptr), (old), (new), (size), "")
> > 
> 
> Yes, you're right; sorry for the noise.
> 
> For your original patch:
> 
> Acked-by: Mark Rutland <mark.rutland@arm.com>
> 

Geert, what's your opinion on this?

Adrian

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer
`. `'   Physicist
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-25  1:51     ` wuqiang.matt
@ 2023-10-25 11:06       ` wuqiang.matt
  0 siblings, 0 replies; 12+ messages in thread
From: wuqiang.matt @ 2023-10-25 11:06 UTC (permalink / raw)
  To: Masami Hiramatsu (Google), Mark Rutland
  Cc: Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz,
	Peter Zijlstra, linux-sh, linux-kernel, linux-trace-kernel

On 2023/10/25 09:51, wuqiang.matt wrote:
> On 2023/10/25 07:42, Masami Hiramatsu (Google) wrote:
>> On Tue, 24 Oct 2023 16:08:12 +0100
>> Mark Rutland <mark.rutland@arm.com> wrote:
>>
>>> On Tue, Oct 24, 2023 at 11:52:54PM +0900, Masami Hiramatsu (Google) wrote:
>>>> From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
>>>>
>>>> Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
>>>> in SH architecture because it does not implement arch_cmpxchg_local().
>>>
>>> I do not think this is correct.
>>>
>>> The implementation in <asm-generic/cmpxchg-local.h> is UP-only (and it only
>>> disables interrupts), whereas arch/sh can be built SMP. We should probably add
>>> some guards into <asm-generic/cmpxchg-local.h> for that as we have in
>>> <asm-generic/cmpxchg.h>.
>>
>> Isn't cmpxchg_local for the data which only needs to ensure to do cmpxchg
>> on local CPU?
> 
> asm-generic/cmpxchg.h is only for UP, will throw an error for SMP building:
> 
> #ifdef CONFIG_SMP
> #error "Cannot use generic cmpxchg on SMP"
> #endif

Sorry that I just noticed Masami's patch has asm-generic/cmpxchg-local.h
included, not asm-generic/cmpxchg.h. cmpxchg.h does throw an error for SMP
configs, but cmpxchg-local.h doesn't.

> SH arch seems it does have SMP systems. The arch/sh/include/asm/cmpxchg.h has
> the following codes:
> 
> #if defined(CONFIG_GUSA_RB)
> #include <asm/cmpxchg-grb.h>
> #elif defined(CONFIG_CPU_SH4A)
> #include <asm/cmpxchg-llsc.h>
> #elif defined(CONFIG_CPU_J2) && defined(CONFIG_SMP)
> #include <asm/cmpxchg-cas.h>
> #else
> #include <asm/cmpxchg-irq.h>
> #endif
> 
>> So I think it doesn't care about the other CPUs (IOW, it should not touched by
>> other CPUs), so it only considers UP case. E.g. on x86, arch_cmpxchg_local() is
>> defined as raw "cmpxchg" without lock prefix.
>>
>> #define __cmpxchg_local(ptr, old, new, size)                            \
>>          __raw_cmpxchg((ptr), (old), (new), (size), "")
>>
>>
>> Thank you,
>>
>>
>>>
>>> I think the right thing to do here is to define arch_cmpxchg_local() in terms
>>> of arch_cmpxchg(), i.e. at the bottom of arch/sh's <asm/cmpxchg.h> add:
>>>
>>> #define arch_cmpxchg_local              arch_cmpxchg
> 
> I agree too. Might not be performance optimized but guarantees correctness.
> 
>>> Mark.
>>>
>>>>
>>>> Reported-by: kernel test robot <lkp@intel.com>
>>>> Closes: 
>>>> https://lore.kernel.org/oe-kbuild-all/202310241310.Ir5uukOG-lkp@intel.com/
>>>> Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
>>>> ---
>>>>   arch/sh/include/asm/cmpxchg.h |    2 ++
>>>>   1 file changed, 2 insertions(+)
>>>>
>>>> diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h
>>>> index 288f6f38d98f..e920e61fb817 100644
>>>> --- a/arch/sh/include/asm/cmpxchg.h
>>>> +++ b/arch/sh/include/asm/cmpxchg.h
>>>> @@ -71,4 +71,6 @@ static inline unsigned long __cmpxchg(volatile void * 
>>>> ptr, unsigned long old,
>>>>                       (unsigned long)_n_, sizeof(*(ptr))); \
>>>>     })
>>>> +#include <asm-generic/cmpxchg-local.h>
>>>> +
>>>>   #endif /* __ASM_SH_CMPXCHG_H */
>>>>
>>
>>
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [External] [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-24 14:52 [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local() Masami Hiramatsu (Google)
  2023-10-24 15:08 ` Mark Rutland
  2023-10-24 16:43 ` John Paul Adrian Glaubitz
@ 2023-10-25 11:26 ` wuqiang.matt
  2023-10-25 15:12   ` Masami Hiramatsu
  2 siblings, 1 reply; 12+ messages in thread
From: wuqiang.matt @ 2023-10-25 11:26 UTC (permalink / raw)
  To: Masami Hiramatsu (Google), Yoshinori Sato, Rich Felker,
	John Paul Adrian Glaubitz
  Cc: Mark Rutland, Peter Zijlstra, linux-sh, linux-kernel,
	linux-trace-kernel

On 2023/10/24 22:52, Masami Hiramatsu (Google) wrote:
> From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> 
> Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
> in SH architecture because it does not implement arch_cmpxchg_local().
> 
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202310241310.Ir5uukOG-lkp@intel.com/
> Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> ---
>   arch/sh/include/asm/cmpxchg.h |    2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h
> index 288f6f38d98f..e920e61fb817 100644
> --- a/arch/sh/include/asm/cmpxchg.h
> +++ b/arch/sh/include/asm/cmpxchg.h
> @@ -71,4 +71,6 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
>   				    (unsigned long)_n_, sizeof(*(ptr))); \
>     })
>   
> +#include <asm-generic/cmpxchg-local.h>
> +

asm-generic/cmpxchg-local.h defines only 2 routines: __generic_cmpxchg_local
and __generic_cmpxchg64_local.

Shall add the definition of arch_cmpxchg_local into 
arch/sh/include/asm/cmpxchg.h, or group arch_cmpxchg_local and 
arch_cmpxchg64_local into
asm-generic/cmpxchg-local.h ?

>   #endif /* __ASM_SH_CMPXCHG_H */
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-25 10:32       ` John Paul Adrian Glaubitz
@ 2023-10-25 13:16         ` Geert Uytterhoeven
  2023-10-25 14:57           ` Masami Hiramatsu
  0 siblings, 1 reply; 12+ messages in thread
From: Geert Uytterhoeven @ 2023-10-25 13:16 UTC (permalink / raw)
  To: John Paul Adrian Glaubitz, Masami Hiramatsu
  Cc: Mark Rutland, Yoshinori Sato, Rich Felker, wuqiang . matt,
	Peter Zijlstra, linux-sh, linux-kernel, linux-trace-kernel,
	Geert Uytterhoeven

Hi Adrian,

On Wed, Oct 25, 2023 at 12:32 PM John Paul Adrian Glaubitz
<glaubitz@physik.fu-berlin.de> wrote:
> On Wed, 2023-10-25 at 11:30 +0100, Mark Rutland wrote:
> > On Wed, Oct 25, 2023 at 08:42:55AM +0900, Masami Hiramatsu wrote:
> > > On Tue, 24 Oct 2023 16:08:12 +0100
> > > Mark Rutland <mark.rutland@arm.com> wrote:
> > > > On Tue, Oct 24, 2023 at 11:52:54PM +0900, Masami Hiramatsu (Google) wrote:
> > > > > From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > > > >
> > > > > Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
> > > > > in SH architecture because it does not implement arch_cmpxchg_local().
> > > >
> > > > I do not think this is correct.
> > > >
> > > > The implementation in <asm-generic/cmpxchg-local.h> is UP-only (and it only
> > > > disables interrupts), whereas arch/sh can be built SMP. We should probably add
> > > > some guards into <asm-generic/cmpxchg-local.h> for that as we have in
> > > > <asm-generic/cmpxchg.h>.
> > >
> > > Isn't cmpxchg_local for the data which only needs to ensure to do cmpxchg
> > > on local CPU?
> > > So I think it doesn't care about the other CPUs (IOW, it should not touched by
> > > other CPUs), so it only considers UP case. E.g. on x86, arch_cmpxchg_local() is
> > > defined as raw "cmpxchg" without lock prefix.
> > >
> > > #define __cmpxchg_local(ptr, old, new, size)                            \
> > >         __raw_cmpxchg((ptr), (old), (new), (size), "")
> > >
> >
> > Yes, you're right; sorry for the noise.
> >
> > For your original patch:
> >
> > Acked-by: Mark Rutland <mark.rutland@arm.com>
>
> Geert, what's your opinion on this?

While this looks OK on first sight (ARM includes the same file, even
on SMP), it does not seem to work?

For sh-allnoconfig, as reported by kernel test robot:

$ make ARCH=sh CROSS_COMPILE=sh2-linux- allnoconfig lib/objpool.o
lib/objpool.c: In function 'objpool_try_add_slot':
./include/linux/atomic/atomic-arch-fallback.h:384:27: error: implicit
declaration of function 'arch_cmpxchg_local'; did you mean
'raw_cmpxchg_local'? [-Werror=implicit-function-declaration]
  384 | #define raw_cmpxchg_local arch_cmpxchg_local
      |                           ^~~~~~~~~~~~~~~~~~
./include/linux/atomic/atomic-arch-fallback.h:392:16: note: in
expansion of macro 'raw_cmpxchg_local'
  392 |         ___r = raw_cmpxchg_local((_ptr), ___o, (_new)); \
      |                ^~~~~~~~~~~~~~~~~
./include/linux/atomic/atomic-instrumented.h:4980:9: note: in
expansion of macro 'raw_try_cmpxchg_local'
 4980 |         raw_try_cmpxchg_local(__ai_ptr, __ai_oldp, __VA_ARGS__); \
      |         ^~~~~~~~~~~~~~~~~~~~~
lib/objpool.c:169:19: note: in expansion of macro 'try_cmpxchg_local'
  169 |         } while (!try_cmpxchg_local(&slot->tail, &tail, tail + 1));
      |                   ^~~~~~~~~~~~~~~~~

For an SMP defconfig:

$ make ARCH=sh CROSS_COMPILE=sh4-linux-gnu- sdk7786_defconfig lib/objpool.o

./include/linux/atomic/atomic-arch-fallback.h:384:27: error: implicit
declaration of function ‘arch_cmpxchg_local’; did you mean
‘try_cmpxchg_local’? [-Werror=implicit-function-declaration]
  384 | #define raw_cmpxchg_local arch_cmpxchg_local
      |                           ^~~~~~~~~~~~~~~~~~
./include/linux/atomic/atomic-arch-fallback.h:392:16: note: in
expansion of macro ‘raw_cmpxchg_local’
  392 |         ___r = raw_cmpxchg_local((_ptr), ___o, (_new)); \
      |                ^~~~~~~~~~~~~~~~~
./include/linux/atomic/atomic-instrumented.h:4980:9: note: in
expansion of macro ‘raw_try_cmpxchg_local’
 4980 |         raw_try_cmpxchg_local(__ai_ptr, __ai_oldp, __VA_ARGS__); \
      |         ^~~~~~~~~~~~~~~~~~~~~
lib/objpool.c:169:19: note: in expansion of macro ‘try_cmpxchg_local’
  169 |         } while (!try_cmpxchg_local(&slot->tail, &tail, tail + 1));
      |                   ^~~~~~~~~~~~~~~~~

Hiramatsu-san: do these build for you?

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-25 13:16         ` Geert Uytterhoeven
@ 2023-10-25 14:57           ` Masami Hiramatsu
  0 siblings, 0 replies; 12+ messages in thread
From: Masami Hiramatsu @ 2023-10-25 14:57 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: John Paul Adrian Glaubitz, Mark Rutland, Yoshinori Sato,
	Rich Felker, wuqiang . matt, Peter Zijlstra, linux-sh,
	linux-kernel, linux-trace-kernel, Geert Uytterhoeven

On Wed, 25 Oct 2023 15:16:16 +0200
Geert Uytterhoeven <geert@linux-m68k.org> wrote:

> Hi Adrian,
> 
> On Wed, Oct 25, 2023 at 12:32 PM John Paul Adrian Glaubitz
> <glaubitz@physik.fu-berlin.de> wrote:
> > On Wed, 2023-10-25 at 11:30 +0100, Mark Rutland wrote:
> > > On Wed, Oct 25, 2023 at 08:42:55AM +0900, Masami Hiramatsu wrote:
> > > > On Tue, 24 Oct 2023 16:08:12 +0100
> > > > Mark Rutland <mark.rutland@arm.com> wrote:
> > > > > On Tue, Oct 24, 2023 at 11:52:54PM +0900, Masami Hiramatsu (Google) wrote:
> > > > > > From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > > > > >
> > > > > > Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
> > > > > > in SH architecture because it does not implement arch_cmpxchg_local().
> > > > >
> > > > > I do not think this is correct.
> > > > >
> > > > > The implementation in <asm-generic/cmpxchg-local.h> is UP-only (and it only
> > > > > disables interrupts), whereas arch/sh can be built SMP. We should probably add
> > > > > some guards into <asm-generic/cmpxchg-local.h> for that as we have in
> > > > > <asm-generic/cmpxchg.h>.
> > > >
> > > > Isn't cmpxchg_local for the data which only needs to ensure to do cmpxchg
> > > > on local CPU?
> > > > So I think it doesn't care about the other CPUs (IOW, it should not touched by
> > > > other CPUs), so it only considers UP case. E.g. on x86, arch_cmpxchg_local() is
> > > > defined as raw "cmpxchg" without lock prefix.
> > > >
> > > > #define __cmpxchg_local(ptr, old, new, size)                            \
> > > >         __raw_cmpxchg((ptr), (old), (new), (size), "")
> > > >
> > >
> > > Yes, you're right; sorry for the noise.
> > >
> > > For your original patch:
> > >
> > > Acked-by: Mark Rutland <mark.rutland@arm.com>
> >
> > Geert, what's your opinion on this?
> 
> While this looks OK on first sight (ARM includes the same file, even
> on SMP), it does not seem to work?
> 
> For sh-allnoconfig, as reported by kernel test robot:
> 
> $ make ARCH=sh CROSS_COMPILE=sh2-linux- allnoconfig lib/objpool.o
> lib/objpool.c: In function 'objpool_try_add_slot':
> ./include/linux/atomic/atomic-arch-fallback.h:384:27: error: implicit
> declaration of function 'arch_cmpxchg_local'; did you mean
> 'raw_cmpxchg_local'? [-Werror=implicit-function-declaration]
>   384 | #define raw_cmpxchg_local arch_cmpxchg_local
>       |                           ^~~~~~~~~~~~~~~~~~
> ./include/linux/atomic/atomic-arch-fallback.h:392:16: note: in
> expansion of macro 'raw_cmpxchg_local'
>   392 |         ___r = raw_cmpxchg_local((_ptr), ___o, (_new)); \
>       |                ^~~~~~~~~~~~~~~~~
> ./include/linux/atomic/atomic-instrumented.h:4980:9: note: in
> expansion of macro 'raw_try_cmpxchg_local'
>  4980 |         raw_try_cmpxchg_local(__ai_ptr, __ai_oldp, __VA_ARGS__); \
>       |         ^~~~~~~~~~~~~~~~~~~~~
> lib/objpool.c:169:19: note: in expansion of macro 'try_cmpxchg_local'
>   169 |         } while (!try_cmpxchg_local(&slot->tail, &tail, tail + 1));
>       |                   ^~~~~~~~~~~~~~~~~
> 
> For an SMP defconfig:
> 
> $ make ARCH=sh CROSS_COMPILE=sh4-linux-gnu- sdk7786_defconfig lib/objpool.o
> 
> ./include/linux/atomic/atomic-arch-fallback.h:384:27: error: implicit
> declaration of function ‘arch_cmpxchg_local’; did you mean
> ‘try_cmpxchg_local’? [-Werror=implicit-function-declaration]
>   384 | #define raw_cmpxchg_local arch_cmpxchg_local
>       |                           ^~~~~~~~~~~~~~~~~~
> ./include/linux/atomic/atomic-arch-fallback.h:392:16: note: in
> expansion of macro ‘raw_cmpxchg_local’
>   392 |         ___r = raw_cmpxchg_local((_ptr), ___o, (_new)); \
>       |                ^~~~~~~~~~~~~~~~~
> ./include/linux/atomic/atomic-instrumented.h:4980:9: note: in
> expansion of macro ‘raw_try_cmpxchg_local’
>  4980 |         raw_try_cmpxchg_local(__ai_ptr, __ai_oldp, __VA_ARGS__); \
>       |         ^~~~~~~~~~~~~~~~~~~~~
> lib/objpool.c:169:19: note: in expansion of macro ‘try_cmpxchg_local’
>   169 |         } while (!try_cmpxchg_local(&slot->tail, &tail, tail + 1));
>       |                   ^~~~~~~~~~~~~~~~~
> 
> Hiramatsu-san: do these build for you?

Thanks for pointing. I thought I just need to include the header file.
That's my fault.

Let me fix that.

Thank you!

> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> -- 
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds


-- 
Masami Hiramatsu (Google) <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [External] [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local()
  2023-10-25 11:26 ` [External] " wuqiang.matt
@ 2023-10-25 15:12   ` Masami Hiramatsu
  0 siblings, 0 replies; 12+ messages in thread
From: Masami Hiramatsu @ 2023-10-25 15:12 UTC (permalink / raw)
  To: wuqiang.matt
  Cc: Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz,
	Mark Rutland, Peter Zijlstra, linux-sh, linux-kernel,
	linux-trace-kernel

On Wed, 25 Oct 2023 19:26:37 +0800
"wuqiang.matt" <wuqiang.matt@bytedance.com> wrote:

> On 2023/10/24 22:52, Masami Hiramatsu (Google) wrote:
> > From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > 
> > Use generic_cmpxchg_local() for arch_cmpxchg_local() implementation
> > in SH architecture because it does not implement arch_cmpxchg_local().
> > 
> > Reported-by: kernel test robot <lkp@intel.com>
> > Closes: https://lore.kernel.org/oe-kbuild-all/202310241310.Ir5uukOG-lkp@intel.com/
> > Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > ---
> >   arch/sh/include/asm/cmpxchg.h |    2 ++
> >   1 file changed, 2 insertions(+)
> > 
> > diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h
> > index 288f6f38d98f..e920e61fb817 100644
> > --- a/arch/sh/include/asm/cmpxchg.h
> > +++ b/arch/sh/include/asm/cmpxchg.h
> > @@ -71,4 +71,6 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
> >   				    (unsigned long)_n_, sizeof(*(ptr))); \
> >     })
> >   
> > +#include <asm-generic/cmpxchg-local.h>
> > +
> 
> asm-generic/cmpxchg-local.h defines only 2 routines: __generic_cmpxchg_local
> and __generic_cmpxchg64_local.

Thanks Wuqiang, I found how I can fix that from your message.

> 
> Shall add the definition of arch_cmpxchg_local into 
> arch/sh/include/asm/cmpxchg.h, or group arch_cmpxchg_local and 
> arch_cmpxchg64_local into
> asm-generic/cmpxchg-local.h ?

No, maybe it depends on the arch that which __generic function need to use.

Thank you,

> 
> >   #endif /* __ASM_SH_CMPXCHG_H */
> > 
> 


-- 
Masami Hiramatsu (Google) <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2023-10-25 15:13 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-24 14:52 [PATCH] locking/atomic: sh: Use generic_cmpxchg_local for arch_cmpxchg_local() Masami Hiramatsu (Google)
2023-10-24 15:08 ` Mark Rutland
2023-10-24 23:42   ` Masami Hiramatsu
2023-10-25  1:51     ` wuqiang.matt
2023-10-25 11:06       ` wuqiang.matt
2023-10-25 10:30     ` Mark Rutland
2023-10-25 10:32       ` John Paul Adrian Glaubitz
2023-10-25 13:16         ` Geert Uytterhoeven
2023-10-25 14:57           ` Masami Hiramatsu
2023-10-24 16:43 ` John Paul Adrian Glaubitz
2023-10-25 11:26 ` [External] " wuqiang.matt
2023-10-25 15:12   ` Masami Hiramatsu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).