Rust for Linux List
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox