Skip to content

locking/qspinlock: simplify code generation

Nicholas Piggin lkml llvm oe-kbuild-all 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest12 patches 1 replyIn review
  2. v113 patches 24 repliesSuperseded

Changes in v2 from the cover letter

- Remove BUILD_BUG_ON contradiction
- Add Longman's for pending bit for !paravirt case
- Make queued_spin_lock_mcs_queue __always_inline
- Drop cmpxchg_acquire->trylock patch that changed generated code slightly (and had wild indenting).
- Fix dropped acquire memory ordering in pv_wait_node cleanup (and renamed it to pv_wait_node_acquire).

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/12locking/qspinlock: remove pv_node abstractionkernel/locking/qspinlock.c kernel/locking/qspinlock_paravirt.h+15 -220 replies
2/12locking/qspinlock: inline mcs_spinlock functions into qspinlockarch/alpha/include/asm/Kbuild arch/arc/include/asm/Kbuild arch/arm/include/asm/mcs_spinlock.h +19 more+43 -2230 replies
3/12locking/qspinlock: split common mcs queueing code into its own functionkernel/locking/qspinlock.c+108 -1000 replies
4/12locking/qspinlock: move pv lock word helpers into qspinlock.ckernel/locking/qspinlock.c kernel/locking/qspinlock_paravirt.h+65 -950 replies
5/12locking/qspinlock: be less clever with the preprocessorkernel/locking/qspinlock.c kernel/locking/qspinlock_paravirt.h+52 -740 replies
6/12locking/qspinlock: merge qspinlock_paravirt.h into qspinlock.ckernel/locking/qspinlock.c kernel/locking/qspinlock_paravirt.h+487 -4911 reply
7/12locking/qspinlock: remove arch qspinlock_paravirt.h includesarch/powerpc/include/asm/qspinlock_paravirt.h arch/x86/include/asm/qspinlock.h arch/x86/include/asm/qspinlock_paravirt.h +2 more+76 -890 replies
8/12locking/qspinlock: stop renaming queued_spin_lock_slowpath to native_queued_spin_lock_slowpatharch/powerpc/include/asm/qspinlock.h arch/x86/include/asm/qspinlock.h arch/x86/kernel/paravirt.c +1 more+26 -360 replies
9/12locking/qspinlock: rename __pv_init_lock_hash to pv_spinlocks_initarch/powerpc/include/asm/qspinlock.h arch/powerpc/include/asm/spinlock.h arch/x86/hyperv/hv_spinlock.c +5 more+11 -130 replies
10/12locking/qspinlock: paravirt use simple trylock in case idx overflowskernel/locking/qspinlock.c+2 -70 replies
11/12locking/qspinlock: separate pv_wait_node from the non-paravirt pathkernel/locking/qspinlock.c+16 -180 replies
12/12locking/qspinlock: simplify pv_wait_head_or_lock calling schemekernel/locking/qspinlock.c+15 -220 replies

Reviews trailers per patch

1 of 12 patches has a Reviewed-by or Acked-by.

PatchBoqun Feng
1/12A-b
2/12
3/12
4/12
5/12
6/12
7/12
8/12
9/12
10/12
11/12
12/12

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v2 thread

Cover letter [PATCH v2 00/12] locking/qspinlock: simplify code generation

This accounts for comments from last post. Thanks for the feedback.

Thanks,
Nick

v2:
- Remove BUILD_BUG_ON contradiction
- Add Longman's for pending bit for !paravirt case
- Make queued_spin_lock_mcs_queue __always_inline
- Drop cmpxchg_acquire->trylock patch that changed generated code slightly (and had wild indenting).
- Fix dropped acquire memory ordering in pv_wait_node cleanup (and renamed it to pv_wait_node_acquire).

Nicholas Piggin (12):
locking/qspinlock: remove pv_node abstraction locking/qspinlock: inline mcs_spinlock functions into qspinlock locking/qspinlock: split common mcs queueing code into its own
function
locking/qspinlock: move pv lock word helpers into qspinlock.c locking/qspinlock: be less clever with the preprocessor locking/qspinlock: merge qspinlock_paravirt.h into qspinlock.c locking/qspinlock: remove arch qspinlock_paravirt.h includes locking/qspinlock: stop renaming queued_spin_lock_slowpath to
native_queued_spin_lock_slowpath
locking/qspinlock: rename __pv_init_lock_hash to pv_spinlocks_init locking/qspinlock: paravirt use simple trylock in case idx overflows locking/qspinlock: separate pv_wait_node from the non-paravirt path locking/qspinlock: simplify pv_wait_head_or_lock calling scheme

 arch/alpha/include/asm/Kbuild                 |   1 -
 arch/arc/include/asm/Kbuild                   |   1 -
 arch/arm/include/asm/mcs_spinlock.h           |  24 -
 arch/arm64/include/asm/Kbuild                 |   1 -
 arch/hexagon/include/asm/Kbuild               |   1 -
 arch/ia64/include/asm/Kbuild                  |   1 -
 arch/m68k/include/asm/Kbuild                  |   1 -
 arch/microblaze/include/asm/Kbuild            |   1 -
 arch/mips/include/asm/Kbuild                  |   1 -
 arch/nios2/include/asm/Kbuild                 |   1 -
 arch/parisc/include/asm/Kbuild                |   1 -
 arch/powerpc/include/asm/Kbuild               |   1 -
 arch/powerpc/include/asm/qspinlock.h          |  45 +-
 arch/powerpc/include/asm/qspinlock_paravirt.h |   7 -
 arch/powerpc/include/asm/spinlock.h           |   2 +-
 arch/s390/include/asm/Kbuild                  |   1 -
 arch/sh/include/asm/Kbuild                    |   1 -
 arch/sparc/include/asm/Kbuild                 |   1 -
 arch/um/include/asm/Kbuild                    |   1 -
 arch/x86/hyperv/hv_spinlock.c                 |   2 +-
 arch/x86/include/asm/Kbuild                   |   1 -
 arch/x86/include/asm/qspinlock.h              |  19 +-
 arch/x86/include/asm/qspinlock_paravirt.h     |  72 --
 arch/x86/kernel/kvm.c                         |   2 +-
 arch/x86/kernel/paravirt-spinlocks.c          |  71 ++
 arch/x86/kernel/paravirt.c                    |   2 +-
 arch/x86/xen/spinlock.c                       |   2 +-
 arch/xtensa/include/asm/Kbuild                |   1 -
 include/asm-generic/mcs_spinlock.h            |  13 -
 include/asm-generic/qspinlock.h               |   6 +
 kernel/locking/mcs_spinlock.h                 | 121 ---
 kernel/locking/qspinlock.c                    | 835 ++++++++++++++----
 kernel/locking/qspinlock_paravirt.h           | 562 ------------
 33 files changed, 764 insertions(+), 1038 deletions(-)
 delete mode 100644 arch/arm/include/asm/mcs_spinlock.h
 delete mode 100644 arch/powerpc/include/asm/qspinlock_paravirt.h
 delete mode 100644 arch/x86/include/asm/qspinlock_paravirt.h
 delete mode 100644 include/asm-generic/mcs_spinlock.h
 delete mode 100644 kernel/locking/mcs_spinlock.h
 delete mode 100644 kernel/locking/qspinlock_paravirt.h
Signature · 1 line
2.35.1