* [PATCH v2 cmpxchg 11/13] csky: Emulate one-byte cmpxchg [not found] <b67e79d4-06cb-4a45-a906-b9e0fbae22c5@paulmck-laptop> @ 2024-05-01 23:01 ` Paul E. McKenney 2024-05-11 6:42 ` Guo Ren 0 siblings, 1 reply; 3+ messages in thread From: Paul E. McKenney @ 2024-05-01 23:01 UTC (permalink / raw) To: linux-arch, linux-kernel Cc: elver, akpm, tglx, peterz, dianders, pmladek, arnd, torvalds, kernel-team, Paul E. McKenney, Yujie Liu, Guo Ren, linux-csky Use the new cmpxchg_emu_u8() to emulate one-byte cmpxchg() on csky. [ paulmck: Apply kernel test robot feedback. ] [ paulmck: Drop two-byte support per Arnd Bergmann feedback. ] Co-developed-by: Yujie Liu <yujie.liu@intel.com> Signed-off-by: Yujie Liu <yujie.liu@intel.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Tested-by: Yujie Liu <yujie.liu@intel.com> Cc: Guo Ren <guoren@kernel.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: <linux-csky@vger.kernel.org> --- arch/csky/Kconfig | 1 + arch/csky/include/asm/cmpxchg.h | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/arch/csky/Kconfig b/arch/csky/Kconfig index d3ac36751ad1f..5479707eb5d10 100644 --- a/arch/csky/Kconfig +++ b/arch/csky/Kconfig @@ -37,6 +37,7 @@ config CSKY select ARCH_INLINE_SPIN_UNLOCK_BH if !PREEMPTION select ARCH_INLINE_SPIN_UNLOCK_IRQ if !PREEMPTION select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPTION + select ARCH_NEED_CMPXCHG_1_EMU select ARCH_WANT_FRAME_POINTERS if !CPU_CK610 && $(cc-option,-mbacktrace) select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT select COMMON_CLK diff --git a/arch/csky/include/asm/cmpxchg.h b/arch/csky/include/asm/cmpxchg.h index 916043b845f14..db6dda47184e4 100644 --- a/arch/csky/include/asm/cmpxchg.h +++ b/arch/csky/include/asm/cmpxchg.h @@ -6,6 +6,7 @@ #ifdef CONFIG_SMP #include <linux/bug.h> #include <asm/barrier.h> +#include <linux/cmpxchg-emu.h> #define __xchg_relaxed(new, ptr, size) \ ({ \ @@ -61,6 +62,9 @@ __typeof__(old) __old = (old); \ __typeof__(*(ptr)) __ret; \ switch (size) { \ + case 1: \ + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \ + break; \ case 4: \ asm volatile ( \ "1: ldex.w %0, (%3) \n" \ @@ -91,6 +95,9 @@ __typeof__(old) __old = (old); \ __typeof__(*(ptr)) __ret; \ switch (size) { \ + case 1: \ + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \ + break; \ case 4: \ asm volatile ( \ "1: ldex.w %0, (%3) \n" \ @@ -122,6 +129,9 @@ __typeof__(old) __old = (old); \ __typeof__(*(ptr)) __ret; \ switch (size) { \ + case 1: \ + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \ + break; \ case 4: \ asm volatile ( \ RELEASE_FENCE \ -- 2.40.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2 cmpxchg 11/13] csky: Emulate one-byte cmpxchg 2024-05-01 23:01 ` [PATCH v2 cmpxchg 11/13] csky: Emulate one-byte cmpxchg Paul E. McKenney @ 2024-05-11 6:42 ` Guo Ren 2024-05-11 14:49 ` Paul E. McKenney 0 siblings, 1 reply; 3+ messages in thread From: Guo Ren @ 2024-05-11 6:42 UTC (permalink / raw) To: Paul E. McKenney Cc: linux-arch, linux-kernel, elver, akpm, tglx, peterz, dianders, pmladek, arnd, torvalds, kernel-team, Yujie Liu, linux-csky On Thu, May 2, 2024 at 7:01 AM Paul E. McKenney <paulmck@kernel.org> wrote: > > Use the new cmpxchg_emu_u8() to emulate one-byte cmpxchg() on csky. > > [ paulmck: Apply kernel test robot feedback. ] > [ paulmck: Drop two-byte support per Arnd Bergmann feedback. ] > > Co-developed-by: Yujie Liu <yujie.liu@intel.com> > Signed-off-by: Yujie Liu <yujie.liu@intel.com> > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> > Tested-by: Yujie Liu <yujie.liu@intel.com> > Cc: Guo Ren <guoren@kernel.org> > Cc: Arnd Bergmann <arnd@arndb.de> > Cc: <linux-csky@vger.kernel.org> > --- > arch/csky/Kconfig | 1 + > arch/csky/include/asm/cmpxchg.h | 10 ++++++++++ > 2 files changed, 11 insertions(+) > > diff --git a/arch/csky/Kconfig b/arch/csky/Kconfig > index d3ac36751ad1f..5479707eb5d10 100644 > --- a/arch/csky/Kconfig > +++ b/arch/csky/Kconfig > @@ -37,6 +37,7 @@ config CSKY > select ARCH_INLINE_SPIN_UNLOCK_BH if !PREEMPTION > select ARCH_INLINE_SPIN_UNLOCK_IRQ if !PREEMPTION > select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPTION > + select ARCH_NEED_CMPXCHG_1_EMU > select ARCH_WANT_FRAME_POINTERS if !CPU_CK610 && $(cc-option,-mbacktrace) > select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT > select COMMON_CLK > diff --git a/arch/csky/include/asm/cmpxchg.h b/arch/csky/include/asm/cmpxchg.h > index 916043b845f14..db6dda47184e4 100644 > --- a/arch/csky/include/asm/cmpxchg.h > +++ b/arch/csky/include/asm/cmpxchg.h > @@ -6,6 +6,7 @@ > #ifdef CONFIG_SMP > #include <linux/bug.h> > #include <asm/barrier.h> > +#include <linux/cmpxchg-emu.h> > > #define __xchg_relaxed(new, ptr, size) \ > ({ \ > @@ -61,6 +62,9 @@ > __typeof__(old) __old = (old); \ > __typeof__(*(ptr)) __ret; \ > switch (size) { \ > + case 1: \ > + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \ > + break; \ > case 4: \ > asm volatile ( \ > "1: ldex.w %0, (%3) \n" \ > @@ -91,6 +95,9 @@ > __typeof__(old) __old = (old); \ > __typeof__(*(ptr)) __ret; \ > switch (size) { \ > + case 1: \ > + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \ > + break; \ > case 4: \ > asm volatile ( \ > "1: ldex.w %0, (%3) \n" \ > @@ -122,6 +129,9 @@ > __typeof__(old) __old = (old); \ > __typeof__(*(ptr)) __ret; \ > switch (size) { \ > + case 1: \ > + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \ > + break; \ > case 4: \ > asm volatile ( \ > RELEASE_FENCE \ > -- > 2.40.1 > Reviewed-by: Guo Ren <guoren@kernel.org> I will optimize it after ARCH_NEED_CMPXCHG_1_EMU is merged. -- Best Regards Guo Ren ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2 cmpxchg 11/13] csky: Emulate one-byte cmpxchg 2024-05-11 6:42 ` Guo Ren @ 2024-05-11 14:49 ` Paul E. McKenney 0 siblings, 0 replies; 3+ messages in thread From: Paul E. McKenney @ 2024-05-11 14:49 UTC (permalink / raw) To: Guo Ren Cc: linux-arch, linux-kernel, elver, akpm, tglx, peterz, dianders, pmladek, arnd, torvalds, kernel-team, Yujie Liu, linux-csky On Sat, May 11, 2024 at 02:42:17PM +0800, Guo Ren wrote: > On Thu, May 2, 2024 at 7:01 AM Paul E. McKenney <paulmck@kernel.org> wrote: > > > > Use the new cmpxchg_emu_u8() to emulate one-byte cmpxchg() on csky. > > > > [ paulmck: Apply kernel test robot feedback. ] > > [ paulmck: Drop two-byte support per Arnd Bergmann feedback. ] > > > > Co-developed-by: Yujie Liu <yujie.liu@intel.com> > > Signed-off-by: Yujie Liu <yujie.liu@intel.com> > > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> > > Tested-by: Yujie Liu <yujie.liu@intel.com> > > Cc: Guo Ren <guoren@kernel.org> > > Cc: Arnd Bergmann <arnd@arndb.de> > > Cc: <linux-csky@vger.kernel.org> > > --- > > arch/csky/Kconfig | 1 + > > arch/csky/include/asm/cmpxchg.h | 10 ++++++++++ > > 2 files changed, 11 insertions(+) > > > > diff --git a/arch/csky/Kconfig b/arch/csky/Kconfig > > index d3ac36751ad1f..5479707eb5d10 100644 > > --- a/arch/csky/Kconfig > > +++ b/arch/csky/Kconfig > > @@ -37,6 +37,7 @@ config CSKY > > select ARCH_INLINE_SPIN_UNLOCK_BH if !PREEMPTION > > select ARCH_INLINE_SPIN_UNLOCK_IRQ if !PREEMPTION > > select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPTION > > + select ARCH_NEED_CMPXCHG_1_EMU > > select ARCH_WANT_FRAME_POINTERS if !CPU_CK610 && $(cc-option,-mbacktrace) > > select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT > > select COMMON_CLK > > diff --git a/arch/csky/include/asm/cmpxchg.h b/arch/csky/include/asm/cmpxchg.h > > index 916043b845f14..db6dda47184e4 100644 > > --- a/arch/csky/include/asm/cmpxchg.h > > +++ b/arch/csky/include/asm/cmpxchg.h > > @@ -6,6 +6,7 @@ > > #ifdef CONFIG_SMP > > #include <linux/bug.h> > > #include <asm/barrier.h> > > +#include <linux/cmpxchg-emu.h> > > > > #define __xchg_relaxed(new, ptr, size) \ > > ({ \ > > @@ -61,6 +62,9 @@ > > __typeof__(old) __old = (old); \ > > __typeof__(*(ptr)) __ret; \ > > switch (size) { \ > > + case 1: \ > > + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \ > > + break; \ > > case 4: \ > > asm volatile ( \ > > "1: ldex.w %0, (%3) \n" \ > > @@ -91,6 +95,9 @@ > > __typeof__(old) __old = (old); \ > > __typeof__(*(ptr)) __ret; \ > > switch (size) { \ > > + case 1: \ > > + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \ > > + break; \ > > case 4: \ > > asm volatile ( \ > > "1: ldex.w %0, (%3) \n" \ > > @@ -122,6 +129,9 @@ > > __typeof__(old) __old = (old); \ > > __typeof__(*(ptr)) __ret; \ > > switch (size) { \ > > + case 1: \ > > + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \ > > + break; \ > > case 4: \ > > asm volatile ( \ > > RELEASE_FENCE \ > > -- > > 2.40.1 > > > Reviewed-by: Guo Ren <guoren@kernel.org> > > I will optimize it after ARCH_NEED_CMPXCHG_1_EMU is merged. Thank you very much! I have applied this and added it to my pull request for the upcoming merge window. Thanx, Paul ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-05-11 14:49 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <b67e79d4-06cb-4a45-a906-b9e0fbae22c5@paulmck-laptop>
2024-05-01 23:01 ` [PATCH v2 cmpxchg 11/13] csky: Emulate one-byte cmpxchg Paul E. McKenney
2024-05-11 6:42 ` Guo Ren
2024-05-11 14:49 ` Paul E. McKenney
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox