All of lore.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL] [PATCH 00/24] Rust synchronization changes for v7.3
@ 2026-07-31 20:30 Boqun Feng
  2026-07-31 20:30 ` [PATCH 01/24] preempt: Track NMI nesting to separate per-CPU counter Boqun Feng
                   ` (23 more replies)
  0 siblings, 24 replies; 25+ messages in thread
From: Boqun Feng @ 2026-07-31 20:30 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: Ingo Molnar, Will Deacon, Boqun Feng, Waiman Long, Gary Guo,
	Alice Ryhl, Lyude Paul, Daniel Almeida, Onur Özkan,
	Miguel Ojeda, Danilo Krummrich, linux-kernel, rust-for-linux

Hi Peter,

Please pull this Rust synchronization changes for v7.3 into tip.

The major changes are the introduction of preempt_count backed interrupt
disabling level tracking, i.e. the local_interrupt_{enable, disable}(),
along with the user (the Rust SpinLockIrq). This should unblock a few
drivers in Rust. For other changes, please refer the following change
log.

The following changes since commit 5e601ab3615c86be7c4068ce992f94654693a032:

  futex: Optimise the size check get_futex_key() (2026-07-29 13:17:52 +0200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/boqun/linux.git tags/rust-sync.20260731a

for you to fetch changes up to 93ff5657a5f1d0d8577b58e66bc116a1e0f38a87:

  rust: revocable: Use LKMM atomics instead of Rust atomics (2026-07-30 13:38:53 -0700)

----------------------------------------------------------------
Rust synchronization changes for v7.3:

* Safe SpinLockIrq
  - Introduce refcounted interrupt disabling and corresponding spinlock
    primitives, which tracks the interrupt disabling "level" in
    preempt_count, as a result, this set of primitives can automatically
    restore the interrupt disabling status when the outermost critical
    section exits.

  - Based on the above, a SpinLockIrq is introduced on the Rust side,
    the guard of which will automatically restore the interrupt
    disabling status when dropped. This avoid playing unsafe games when
    using irq disabled spinlocks.

* Add synchronize_rcu() safe abstraction.

* Generic memory barrier: this extends our Rust barrier primitives to
  include more barriers for DMA as well.

* Replace the atomic usage in Revocable with LKMM atomics.
-----BEGIN PGP SIGNATURE-----

iQFhBAABCABLFiEEj5IosQTPz8XU1wRHSXnow7UH+rgFAmptA2MbFIAAAAAABAAO
bWFudTIsMi41KzEuMTIsMCwzERxib3F1bkBrZXJuZWwub3JnAAoJEEl56MO1B/q4
UBAH/108a8dCkDaK3MUuS0SeuqY57EPwLCTE/k4gJK35XlF0fCpEPfFtqfEs6xkG
E0rMhSx3bDmtfccEo16LOkmbcrSx3NSsc9KlSRiYRywptT+CRld5FPqmJqDd2nCh
mYYUsNppEXFd4rUiGfKAcVeLHD+PCio0/ElNN7X3TCfQgtWUuDp4pcB23m9t6ste
Re4idhKoTmqeKTX3N8AuQ0QMsr1FNNLu0ESpUv1n6/DrEB1g8XevF1J2PKYr9fxt
aahCMk2qQF3vDCi4Ydh9o9AWqSkinU2yIW64ZBWRC2S7QBVRIrPAEtX4V/n7d/n+
2irbb1ZuVu5zFD0/CyNkgyQM/og=
=DzLT
-----END PGP SIGNATURE-----


Regards,
Boqun

----------------------------------------------------------------
Boqun Feng (10):
      preempt: Introduce HARDIRQ_DISABLE_BITS
      preempt: Introduce __preempt_count_{sub, add}_return()
      irq & spin_lock: Add counted interrupt disabling/enabling
      locking: Switch to _irq_{disable,enable}() variants in cleanup guards
      sched: Remove the unused preempt_offset parameter of __cant_sleep()
      sched: Avoid signed comparison of preempt_count() in __cant_migrate()
      preempt: Introduce HAS_SEPARATE_PREEMPT_RESCHED_BITS
      arm64: sched/preempt: Enable HAS_SEPARATE_PREEMPT_RESCHED_BITS
      irq: Optimize reschedule check in local_interrupt_enable()
      rust: helper: Add spin_{un,}lock_irq_{enable,disable}() helpers

Gary Guo (3):
      rust: sync: Add helpers for mb, dma_mb and friends
      rust: sync: Add generic memory barriers
      rust: revocable: Use LKMM atomics instead of Rust atomics

Heiko Carstens (1):
      s390/preempt: Enable HAS_SEPARATE_PREEMPT_RESCHED_BITS

Joel Fernandes (1):
      preempt: Track NMI nesting to separate per-CPU counter

Lyude Paul (6):
      openrisc: Include <linux/cpumask.h> in smp.h
      irq: Add KUnit test for refcounted interrupt enable/disable
      rust: Introduce interrupt module
      rust: sync: use super::* in spinlock.rs
      rust: sync: Add SpinLockIrq
      rust: sync: Introduce SpinLockIrq::lock_with() and friends

Philipp Stanner (3):
      rust: sync: Add abstraction for synchronize_rcu()
      rust: revocable: Use safe synchronize_rcu() abstraction
      rust: sync: Use safe synchronize_rcu() abstraction in poll

 arch/arm64/Kconfig                             |   1 +
 arch/arm64/include/asm/preempt.h               |  18 ++
 arch/openrisc/include/asm/smp.h                |   2 +
 arch/s390/Kconfig                              |   1 +
 arch/s390/include/asm/lowcore.h                |  13 +-
 arch/s390/include/asm/preempt.h                |  49 ++--
 arch/x86/Kconfig                               |   1 +
 arch/x86/include/asm/preempt.h                 |  61 +++--
 arch/x86/kernel/cpu/common.c                   |   2 +-
 include/asm-generic/preempt.h                  |  14 ++
 include/linux/hardirq.h                        |  41 ++-
 include/linux/interrupt_rc.h                   |  76 ++++++
 include/linux/kernel.h                         |   4 +-
 include/linux/preempt.h                        |  35 ++-
 include/linux/spinlock.h                       |  35 ++-
 include/linux/spinlock_api_smp.h               |  41 +++
 include/linux/spinlock_api_up.h                |  16 ++
 include/linux/spinlock_rt.h                    |  18 ++
 kernel/Kconfig.preempt                         |   4 +
 kernel/irq/Makefile                            |   1 +
 kernel/irq/refcount_interrupt_test.c           | 109 ++++++++
 kernel/locking/spinlock.c                      |  29 +++
 kernel/sched/core.c                            |  18 +-
 kernel/softirq.c                               |  22 +-
 lib/locking-selftest.c                         |   2 +-
 rust/helpers/barrier.c                         |  30 +++
 rust/helpers/helpers.c                         |   1 +
 rust/helpers/interrupt.c                       |  18 ++
 rust/helpers/spinlock.c                        |  15 ++
 rust/helpers/sync.c                            |   5 +
 rust/kernel/interrupt.rs                       |  89 +++++++
 rust/kernel/lib.rs                             |   1 +
 rust/kernel/revocable.rs                       |  28 ++-
 rust/kernel/sync.rs                            |   9 +-
 rust/kernel/sync/atomic/ordering.rs            |   2 +-
 rust/kernel/sync/barrier.rs                    | 127 +++++++---
 rust/kernel/sync/lock/global.rs                |   3 +
 rust/kernel/sync/lock/spinlock.rs              | 331 ++++++++++++++++++++++++-
 rust/kernel/sync/poll.rs                       |  10 +-
 rust/kernel/sync/rcu.rs                        |  16 ++
 tools/testing/selftests/bpf/bpf_experimental.h |   7 +-
 41 files changed, 1184 insertions(+), 121 deletions(-)
 create mode 100644 include/linux/interrupt_rc.h
 create mode 100644 kernel/irq/refcount_interrupt_test.c
 create mode 100644 rust/helpers/interrupt.c
 create mode 100644 rust/kernel/interrupt.rs

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

end of thread, other threads:[~2026-07-31 20:31 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-31 20:30 [GIT PULL] [PATCH 00/24] Rust synchronization changes for v7.3 Boqun Feng
2026-07-31 20:30 ` [PATCH 01/24] preempt: Track NMI nesting to separate per-CPU counter Boqun Feng
2026-07-31 20:30 ` [PATCH 02/24] preempt: Introduce HARDIRQ_DISABLE_BITS Boqun Feng
2026-07-31 20:30 ` [PATCH 03/24] preempt: Introduce __preempt_count_{sub, add}_return() Boqun Feng
2026-07-31 20:30 ` [PATCH 04/24] openrisc: Include <linux/cpumask.h> in smp.h Boqun Feng
2026-07-31 20:30 ` [PATCH 05/24] irq & spin_lock: Add counted interrupt disabling/enabling Boqun Feng
2026-07-31 20:30 ` [PATCH 06/24] irq: Add KUnit test for refcounted interrupt enable/disable Boqun Feng
2026-07-31 20:30 ` [PATCH 07/24] locking: Switch to _irq_{disable,enable}() variants in cleanup guards Boqun Feng
2026-07-31 20:30 ` [PATCH 08/24] sched: Remove the unused preempt_offset parameter of __cant_sleep() Boqun Feng
2026-07-31 20:30 ` [PATCH 09/24] sched: Avoid signed comparison of preempt_count() in __cant_migrate() Boqun Feng
2026-07-31 20:30 ` [PATCH 10/24] preempt: Introduce HAS_SEPARATE_PREEMPT_RESCHED_BITS Boqun Feng
2026-07-31 20:30 ` [PATCH 11/24] arm64: sched/preempt: Enable HAS_SEPARATE_PREEMPT_RESCHED_BITS Boqun Feng
2026-07-31 20:30 ` [PATCH 12/24] s390/preempt: " Boqun Feng
2026-07-31 20:30 ` [PATCH 13/24] irq: Optimize reschedule check in local_interrupt_enable() Boqun Feng
2026-07-31 20:30 ` [PATCH 14/24] rust: Introduce interrupt module Boqun Feng
2026-07-31 20:30 ` [PATCH 15/24] rust: helper: Add spin_{un,}lock_irq_{enable,disable}() helpers Boqun Feng
2026-07-31 20:30 ` [PATCH 16/24] rust: sync: use super::* in spinlock.rs Boqun Feng
2026-07-31 20:30 ` [PATCH 17/24] rust: sync: Add SpinLockIrq Boqun Feng
2026-07-31 20:30 ` [PATCH 18/24] rust: sync: Introduce SpinLockIrq::lock_with() and friends Boqun Feng
2026-07-31 20:30 ` [PATCH 19/24] rust: sync: Add abstraction for synchronize_rcu() Boqun Feng
2026-07-31 20:30 ` [PATCH 20/24] rust: revocable: Use safe synchronize_rcu() abstraction Boqun Feng
2026-07-31 20:30 ` [PATCH 21/24] rust: sync: Use safe synchronize_rcu() abstraction in poll Boqun Feng
2026-07-31 20:30 ` [PATCH 22/24] rust: sync: Add helpers for mb, dma_mb and friends Boqun Feng
2026-07-31 20:30 ` [PATCH 23/24] rust: sync: Add generic memory barriers Boqun Feng
2026-07-31 20:30 ` [PATCH 24/24] rust: revocable: Use LKMM atomics instead of Rust atomics Boqun Feng

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.