Skip to content

arch: Add qspinlock support and atomic cleanup

[email protected] linux-arch linux-csky linux-riscv lkml 4 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v9 Latest15 patches 1 replyIn review
  2. v810 patches 5 repliesSuperseded
  3. v7 posting 2/20 of 5 patches 0 repliesSuperseded
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v7 posting 1/25 patches18 repliesSuperseded

Patches in v9 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/15asm-generic: ticket-lock: Remove unnecessary atomic_readinclude/asm-generic/spinlock.h+9 -70 replies
2/15asm-generic: ticket-lock: Use the same struct definitions with qspinlockinclude/asm-generic/spinlock.h include/asm-generic/spinlock_types.h+9 -170 replies
3/15asm-generic: ticket-lock: Move into ticket_spinlock.hinclude/asm-generic/spinlock.h include/asm-generic/ticket_spinlock.h+104 -860 replies
4/15asm-generic: ticket-lock: Keep ticket-lock the same semantic with qspinlockinclude/asm-generic/spinlock.h include/asm-generic/ticket_spinlock.h+9 -140 replies
5/15asm-generic: spinlock: Add queued spinlock support in common headerinclude/asm-generic/spinlock.h+4 -00 replies
6/15riscv: atomic: Clean up unnecessary acquire and release definitionsarch/riscv/include/asm/atomic.h arch/riscv/include/asm/cmpxchg.h+0 -1350 replies
7/15riscv: cmpxchg: Remove xchg32 and xchg64arch/riscv/include/asm/cmpxchg.h+0 -120 replies
8/15riscv: cmpxchg: Forbid arch_cmpxchg64 for 32-bitarch/riscv/include/asm/cmpxchg.h+7 -00 replies
9/15riscv: cmpxchg: Optimize cmpxchg64arch/riscv/include/asm/cmpxchg.h+18 -00 replies
10/15riscv: Enable ARCH_INLINE_READ*/WRITE*/SPIN*arch/riscv/Kconfig+26 -00 replies
11/15riscv: Add qspinlock supportarch/riscv/Kconfig arch/riscv/include/asm/Kbuild arch/riscv/include/asm/cmpxchg.h+42 -00 replies
12/15riscv: Add combo spinlock supportarch/riscv/Kconfig arch/riscv/include/asm/Kbuild arch/riscv/include/asm/spinlock.h +1 more+107 -20 replies
13/15openrisc: cmpxchg: Cleanup unnecessary codesarch/openrisc/include/asm/cmpxchg.h+50 -1170 replies
14/15openrisc: Move from ticket-lock to qspinlockarch/openrisc/Kconfig arch/openrisc/include/asm/Kbuild arch/openrisc/include/asm/cmpxchg.h+28 -00 replies
15/15csky: spinlock: Use the generic header filesarch/csky/include/asm/Kbuild arch/csky/include/asm/spinlock.h arch/csky/include/asm/spinlock_types.h+2 -210 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v9 yet.

Read the v9 thread

Cover letter [PATCH V9 00/15] arch: Add qspinlock support and atomic cleanup

From: Guo Ren <[email protected]>

In this series:
- Cleanup generic ticket-lock code, (Using smp_mb__after_spinlock as RCsc)
- Add qspinlock and combo-lock for riscv
- Add qspinlock to openrisc
- Use generic header in csky
- Optimize cmpxchg & atomic code

Enable qspinlock and meet the requirements mentioned in a8ad07e5240c9 ("asm-generic: qspinlock: Indicate the use of mixed-size atomics").

RISC-V LR/SC pairs could provide a strong/weak forward guarantee that depends on micro-architecture. And RISC-V ISA spec has given out several limitations to let hardware support strict forward guarantee (RISC-V User ISA - 8.3 Eventual Success of Store-Conditional Instructions).

eg:
Some riscv hardware such as BOOMv3 & XiangShan could provide strict & strong forward guarantee (The cache line would be kept in an exclusive state for Backoff cycles, and only this core's interrupt could break the LR/SC pair).
Qemu riscv give a weak forward guarantee by wrong implementation currently [1].

So we Add combo spinlock (ticket & queued) support for riscv. Thus different kinds of memory model micro-arch processors could use the same Image

The first try of qspinlock for riscv was made in 2019.1 [2].

[1] https://github.com/qemu/qemu/blob/master/target/riscv/insn_trans/trans_rva.c.inc
[2] https://lore.kernel.org/linux-riscv/[email protected]/#r

Guo Ren (15):
asm-generic: ticket-lock: Remove unnecessary atomic_read
asm-generic: ticket-lock: Use the same struct definitions with qspinlock
asm-generic: ticket-lock: Move into ticket_spinlock.h
asm-generic: ticket-lock: Keep ticket-lock the same semantic with qspinlock
asm-generic: spinlock: Add queued spinlock support in common header
riscv: atomic: Clean up unnecessary acquire and release definitions
riscv: cmpxchg: Remove xchg32 and xchg64
riscv: cmpxchg: Forbid arch_cmpxchg64 for 32-bit
riscv: cmpxchg: Optimize cmpxchg64
riscv: Enable ARCH_INLINE_READ*/WRITE*/SPIN*
riscv: Add qspinlock support
riscv: Add combo spinlock support
openrisc: cmpxchg: Cleanup unnecessary codes
openrisc: Move from ticket-lock to qspinlock
csky: spinlock: Use the generic header files

 arch/csky/include/asm/Kbuild           |   2 +
 arch/csky/include/asm/spinlock.h       |  12 --
 arch/csky/include/asm/spinlock_types.h |   9 --
 arch/openrisc/Kconfig                  |   1 +
 arch/openrisc/include/asm/Kbuild       |   2 +
 arch/openrisc/include/asm/cmpxchg.h    | 192 ++++++++++---------------
 arch/riscv/Kconfig                     |  49 +++++++
 arch/riscv/include/asm/Kbuild          |   3 +-
 arch/riscv/include/asm/atomic.h        |  19 ---
 arch/riscv/include/asm/cmpxchg.h       | 177 +++++++----------------
 arch/riscv/include/asm/spinlock.h      |  77 ++++++++++
 arch/riscv/kernel/setup.c              |  22 +++
 include/asm-generic/spinlock.h         |  94 ++----------
 include/asm-generic/spinlock_types.h   |  12 +-
 include/asm-generic/ticket_spinlock.h  |  93 ++++++++++++
 15 files changed, 384 insertions(+), 380 deletions(-)
 delete mode 100644 arch/csky/include/asm/spinlock.h
 delete mode 100644 arch/csky/include/asm/spinlock_types.h
 create mode 100644 arch/riscv/include/asm/spinlock.h
 create mode 100644 include/asm-generic/ticket_spinlock.h
Signature · 1 line
2.36.1