arm64: percpu: Rewrite per-cpu ops to allow use of LSE atomics
authorWill Deacon <will.deacon@arm.com>
Thu, 13 Sep 2018 14:56:16 +0000 (15:56 +0100)
committerWill Deacon <will.deacon@arm.com>
Fri, 7 Dec 2018 17:28:06 +0000 (17:28 +0000)
commit959bf2fd03b59fc107584c21425f3dc73c49f762
treeabbe029ffb9c8c1f720b7954931057dd1ba32e35
parentb4f9209bfcd5964551de434342818334ab9c8c7e
arm64: percpu: Rewrite per-cpu ops to allow use of LSE atomics

Our percpu code is a bit of an inconsistent mess:

  * It rolls its own xchg(), but reuses cmpxchg_local()
  * It uses various different flavours of preempt_{enable,disable}()
  * It returns values even for the non-returning RmW operations
  * It makes no use of LSE atomics outside of the cmpxchg() ops
  * There are individual macros for different sizes of access, but these
    are all funneled through a switch statement rather than dispatched
    directly to the relevant case

This patch rewrites the per-cpu operations to address these shortcomings.
Whilst the new code is a lot cleaner, the big advantage is that we can
use the non-returning ST- atomic instructions when we have LSE.

Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/include/asm/percpu.h