public inbox for linux-arch@vger.kernel.org
 help / color / mirror / Atom feed
* Re: __HAVE_ARCH_CMPXCHG on ARM?
       [not found]   ` <20150202133933.GD31847@arm.com>
@ 2015-02-03 19:27     ` Josh Cartwright
  2015-02-03 19:27       ` Josh Cartwright
  2015-02-18 10:44       ` Sebastian Andrzej Siewior
  0 siblings, 2 replies; 6+ messages in thread
From: Josh Cartwright @ 2015-02-03 19:27 UTC (permalink / raw)
  To: Will Deacon
  Cc: Yong Zhang, Yong Zhang, Nathan Sullivan, linux-rt-users,
	linux-arm-kernel@lists.infradead.org, linux-arch

On Mon, Feb 02, 2015 at 01:39:33PM +0000, Will Deacon wrote:
> On Fri, Jan 30, 2015 at 08:44:48AM +0000, Yong Zhang wrote:
> > On Fri, Jan 30, 2015 at 2:56 AM, Nathan Sullivan <nathan.sullivan@ni.com<mailto:nathan.sullivan@ni.com>> wrote:
> > 
> > While investigating a performance issue on RT 3.14, I noticed that
> > __HAVE_ARCH_CMPXCHG is not defined for ARM.  This causes -rt locks to
> > always use the slow path and impacts performance.  ARMv6 and above
> > have a cmpxchg implementation already that will work just fine.
> > 
> > In 2012, Yong Zhang submitted a patch to fix this[1], but it mysteriously
> > disappeared afterwards.  I did notice that the s-o-b line has a different
> > email address than the windriver one.  Yong, do you mind re-submitting the
> > 
> > It actually doesn't matter. Anyway feel free to add another s-o-b to
> > the patch:
> > 
> > Signed-off-by: Yong Zhang <yong.zhang@windriver.com<mailto:yong.zhang@windriver.com>>

I did a quick scan of architectures and looked at the various cmpxchg
implementations.  Assuming that __HAVE_ARCH_CMPXCHG really means "this
architecture implements a native cmpxchg which is faster than the
generic implementation", I put what I found in the following table; note
that I'm not 100% confident these are correct, as in some instances I
had to make a judgement call as to whether the implementation is "fast",
hopefully it's still useful :).

                 native         native
                cmpxchg (UP)   cmpxchg (SMP)    __HAVE_ARCH_CMPXCHG
          alpha     X               X                      X
            arc     X[1]            X[1]
arm (pre ARMv6)                    [2]
   arm (ARMv6+)     X               X
          arm64     X               X
          avr32     X               X                      X
       blackfin                     X
            c6x                    [2]
           cris                    [3]
            frv     X               X
        hexagon     X               X                      X
           ia64     X               X                      X
           m32r     X               X                      X
           m68k     X[4]            X[4]                   X[4]
          metag     X               X                      X
     microblaze                    [2]
           mips     X               X
        mn10300                     X[5]
          nios2                    [2]
       openrisc                    [6]
         parisc     X               X                      X
        powerpc     X               X                      X
           s390     X               X                      X
          score    [7]             [7]                     X[7]
             sh     X               X                      X
          sparc     X               X                      X
           tile     X               X
      unicore32                    [2]
            x86     X               X                      X
         xtensa     X               X

1: Conditional on CONFIG_ARC_HAS_LLSC
2: SMP not a supported configuration
3: No cmpxchg() implementation at all?
4: Conditional on CONFIG_RMW_INSNS
5: Conditional on CONFIG_MN10300_HAS_ATOMIC_OPS_UNIT
6: SMP not supported?  Uses generic cmpxchg.
7: Should use generic cmpxchg/cmpxchg_local?  Setting __HAVE_ARCH_CMPXCHG a bug?

> > +#define __HAVE_ARCH_CMPXCHG 1
> 
> Is it even possible to have CONFIG_SMP=y on an architecture that doesn't
> support native cmpxchg? Certainly, the asm-generic cmpxchg.h barfs if
> SMP, so couldn't we just change/extend the __HAVE_ARCH_CMPXCHG check in
> rtmutex.c to work automatically with SMP architectures? That would help
> arm64 too.

Looks like there are a few arch-specific conditionals that might need to
be worked out for arc, m68k, and mn10300; but this could potentially
work.

If we don't go down that route, we should probably at least add
__HAVE_ARCH_CMPXCHG for arm64, blackfin (on SMP), frv, mips, tile, and
xtensa as well.

  Josh

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

* Re: __HAVE_ARCH_CMPXCHG on ARM?
  2015-02-03 19:27     ` __HAVE_ARCH_CMPXCHG on ARM? Josh Cartwright
@ 2015-02-03 19:27       ` Josh Cartwright
  2015-02-18 10:44       ` Sebastian Andrzej Siewior
  1 sibling, 0 replies; 6+ messages in thread
From: Josh Cartwright @ 2015-02-03 19:27 UTC (permalink / raw)
  To: Will Deacon
  Cc: Yong Zhang, Yong Zhang, Nathan Sullivan, linux-rt-users,
	linux-arm-kernel@lists.infradead.org, linux-arch

On Mon, Feb 02, 2015 at 01:39:33PM +0000, Will Deacon wrote:
> On Fri, Jan 30, 2015 at 08:44:48AM +0000, Yong Zhang wrote:
> > On Fri, Jan 30, 2015 at 2:56 AM, Nathan Sullivan <nathan.sullivan@ni.com<mailto:nathan.sullivan@ni.com>> wrote:
> > 
> > While investigating a performance issue on RT 3.14, I noticed that
> > __HAVE_ARCH_CMPXCHG is not defined for ARM.  This causes -rt locks to
> > always use the slow path and impacts performance.  ARMv6 and above
> > have a cmpxchg implementation already that will work just fine.
> > 
> > In 2012, Yong Zhang submitted a patch to fix this[1], but it mysteriously
> > disappeared afterwards.  I did notice that the s-o-b line has a different
> > email address than the windriver one.  Yong, do you mind re-submitting the
> > 
> > It actually doesn't matter. Anyway feel free to add another s-o-b to
> > the patch:
> > 
> > Signed-off-by: Yong Zhang <yong.zhang@windriver.com<mailto:yong.zhang@windriver.com>>

I did a quick scan of architectures and looked at the various cmpxchg
implementations.  Assuming that __HAVE_ARCH_CMPXCHG really means "this
architecture implements a native cmpxchg which is faster than the
generic implementation", I put what I found in the following table; note
that I'm not 100% confident these are correct, as in some instances I
had to make a judgement call as to whether the implementation is "fast",
hopefully it's still useful :).

                 native         native
                cmpxchg (UP)   cmpxchg (SMP)    __HAVE_ARCH_CMPXCHG
          alpha     X               X                      X
            arc     X[1]            X[1]
arm (pre ARMv6)                    [2]
   arm (ARMv6+)     X               X
          arm64     X               X
          avr32     X               X                      X
       blackfin                     X
            c6x                    [2]
           cris                    [3]
            frv     X               X
        hexagon     X               X                      X
           ia64     X               X                      X
           m32r     X               X                      X
           m68k     X[4]            X[4]                   X[4]
          metag     X               X                      X
     microblaze                    [2]
           mips     X               X
        mn10300                     X[5]
          nios2                    [2]
       openrisc                    [6]
         parisc     X               X                      X
        powerpc     X               X                      X
           s390     X               X                      X
          score    [7]             [7]                     X[7]
             sh     X               X                      X
          sparc     X               X                      X
           tile     X               X
      unicore32                    [2]
            x86     X               X                      X
         xtensa     X               X

1: Conditional on CONFIG_ARC_HAS_LLSC
2: SMP not a supported configuration
3: No cmpxchg() implementation at all?
4: Conditional on CONFIG_RMW_INSNS
5: Conditional on CONFIG_MN10300_HAS_ATOMIC_OPS_UNIT
6: SMP not supported?  Uses generic cmpxchg.
7: Should use generic cmpxchg/cmpxchg_local?  Setting __HAVE_ARCH_CMPXCHG a bug?

> > +#define __HAVE_ARCH_CMPXCHG 1
> 
> Is it even possible to have CONFIG_SMP=y on an architecture that doesn't
> support native cmpxchg? Certainly, the asm-generic cmpxchg.h barfs if
> SMP, so couldn't we just change/extend the __HAVE_ARCH_CMPXCHG check in
> rtmutex.c to work automatically with SMP architectures? That would help
> arm64 too.

Looks like there are a few arch-specific conditionals that might need to
be worked out for arc, m68k, and mn10300; but this could potentially
work.

If we don't go down that route, we should probably at least add
__HAVE_ARCH_CMPXCHG for arm64, blackfin (on SMP), frv, mips, tile, and
xtensa as well.

  Josh

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

* Re: __HAVE_ARCH_CMPXCHG on ARM?
  2015-02-03 19:27     ` __HAVE_ARCH_CMPXCHG on ARM? Josh Cartwright
  2015-02-03 19:27       ` Josh Cartwright
@ 2015-02-18 10:44       ` Sebastian Andrzej Siewior
  2015-02-18 10:44         ` Sebastian Andrzej Siewior
  2015-02-18 16:34         ` Josh Cartwright
  1 sibling, 2 replies; 6+ messages in thread
From: Sebastian Andrzej Siewior @ 2015-02-18 10:44 UTC (permalink / raw)
  To: Josh Cartwright
  Cc: Will Deacon, Yong Zhang, Yong Zhang, Nathan Sullivan,
	linux-rt-users, linux-arm-kernel@lists.infradead.org, linux-arch

* Josh Cartwright | 2015-02-03 13:27:30 [-0600]:

>                 native         native
>                cmpxchg (UP)   cmpxchg (SMP)    __HAVE_ARCH_CMPXCHG
>         xtensa     X               X

This one does not always have cmpxchg on UP (only the SMP variant which
provides atomic operation).

>  Josh

Sebastian

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

* Re: __HAVE_ARCH_CMPXCHG on ARM?
  2015-02-18 10:44       ` Sebastian Andrzej Siewior
@ 2015-02-18 10:44         ` Sebastian Andrzej Siewior
  2015-02-18 16:34         ` Josh Cartwright
  1 sibling, 0 replies; 6+ messages in thread
From: Sebastian Andrzej Siewior @ 2015-02-18 10:44 UTC (permalink / raw)
  To: Josh Cartwright
  Cc: Will Deacon, Yong Zhang, Yong Zhang, Nathan Sullivan,
	linux-rt-users, linux-arm-kernel@lists.infradead.org, linux-arch

* Josh Cartwright | 2015-02-03 13:27:30 [-0600]:

>                 native         native
>                cmpxchg (UP)   cmpxchg (SMP)    __HAVE_ARCH_CMPXCHG
>         xtensa     X               X

This one does not always have cmpxchg on UP (only the SMP variant which
provides atomic operation).

>  Josh

Sebastian

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

* Re: __HAVE_ARCH_CMPXCHG on ARM?
  2015-02-18 10:44       ` Sebastian Andrzej Siewior
  2015-02-18 10:44         ` Sebastian Andrzej Siewior
@ 2015-02-18 16:34         ` Josh Cartwright
  2015-02-18 16:34           ` Josh Cartwright
  1 sibling, 1 reply; 6+ messages in thread
From: Josh Cartwright @ 2015-02-18 16:34 UTC (permalink / raw)
  To: Sebastian Andrzej Siewior
  Cc: Will Deacon, Yong Zhang, Yong Zhang, Nathan Sullivan,
	linux-rt-users, linux-arm-kernel@lists.infradead.org, linux-arch

On Wed, Feb 18, 2015 at 11:44:59AM +0100, Sebastian Andrzej Siewior wrote:
> * Josh Cartwright | 2015-02-03 13:27:30 [-0600]:
> 
> >                 native         native
> >                cmpxchg (UP)   cmpxchg (SMP)    __HAVE_ARCH_CMPXCHG
> >         xtensa     X               X
> 
> This one does not always have cmpxchg on UP (only the SMP variant which
> provides atomic operation).

Ah!  Thanks for double checking my work; my eyes started to glaze over
after looking at the other 29 architectures.

  Josh

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

* Re: __HAVE_ARCH_CMPXCHG on ARM?
  2015-02-18 16:34         ` Josh Cartwright
@ 2015-02-18 16:34           ` Josh Cartwright
  0 siblings, 0 replies; 6+ messages in thread
From: Josh Cartwright @ 2015-02-18 16:34 UTC (permalink / raw)
  To: Sebastian Andrzej Siewior
  Cc: Will Deacon, Yong Zhang, Yong Zhang, Nathan Sullivan,
	linux-rt-users, linux-arm-kernel@lists.infradead.org, linux-arch

On Wed, Feb 18, 2015 at 11:44:59AM +0100, Sebastian Andrzej Siewior wrote:
> * Josh Cartwright | 2015-02-03 13:27:30 [-0600]:
> 
> >                 native         native
> >                cmpxchg (UP)   cmpxchg (SMP)    __HAVE_ARCH_CMPXCHG
> >         xtensa     X               X
> 
> This one does not always have cmpxchg on UP (only the SMP variant which
> provides atomic operation).

Ah!  Thanks for double checking my work; my eyes started to glaze over
after looking at the other 29 architectures.

  Josh

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

end of thread, other threads:[~2015-02-18 16:34 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20150129185618.GA31459@nathan3500-linux-VM>
     [not found] ` <CAM2zO=CVCZFNiSukgcgNNT0==xgLK4w5HF3Pz=dcFmrEHPtLdw@mail.gmail.com>
     [not found]   ` <20150202133933.GD31847@arm.com>
2015-02-03 19:27     ` __HAVE_ARCH_CMPXCHG on ARM? Josh Cartwright
2015-02-03 19:27       ` Josh Cartwright
2015-02-18 10:44       ` Sebastian Andrzej Siewior
2015-02-18 10:44         ` Sebastian Andrzej Siewior
2015-02-18 16:34         ` Josh Cartwright
2015-02-18 16:34           ` Josh Cartwright

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox