Re: [PATCH 00/11] Refcounted interrupt disable and SpinLockIrq for rust (Part 1)

From: Heiko Carstens

Date: Sat May 09 2026 - 14:17:17 EST


On Thu, May 07, 2026 at 09:21:00PM -0700, Boqun Feng wrote:
> Hi Peter,
>
> This is a follow-up for Lyude's work [1]. Per your feedback at [2], I
> did some digging and turned out that ARM64 already kinda did this. The
> basic idea is based on:
>
> 1) preempt_count() previously mask our NEED_RESCHED bit, so the
> effective bits is 31bits
> 2) with a 64bit preempt count implementation (as in your PREEMPT_LONG
> proposal), the effective bits that record "whether we CAN preempt or
> not" still fit in 32bit (i.e. an int)
>
> as a result, I don't think we need to change the existing
> preempt_count() API, but rather keep "32bit vs 64bit" as an
> implementation detail. This saves us the need to change the printk code
> for preempt_count().
>
> For people who have reviewed the previous version, patch 8-11 are new,
> please take a look.
>
> The patchset passed the build and booting tests and also a "perf record"
> test on x86 for NMI code path.
>
> I would like to target this changes for 7.2 if possible.
>
> [1]: https://lore.kernel.org/all/20260121223933.1568682-1-lyude@xxxxxxxxxx/
> [2]: https://lore.kernel.org/all/20260204111234.GA3031506@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/
>
> Regards,
> Boqun
>
> Boqun Feng (8):
> 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 PREEMPT_COUNT_64BIT
> arm64: sched/preempt: Enable PREEMPT_COUNT_64BIT

The below is the s390 conversion to PREEMPT_COUNT_64BIT (or whatever the
future name might be). I'd appreciate if you would add that to your series.