Re: [PATCH 1/2] arm64/entry: Fix involuntary preemption exception masking
From: Peter Zijlstra <peterz@infradead.org>
Date: 2026-03-20 13:04:39
Also in:
lkml
On Fri, Mar 20, 2026 at 11:30:25AM +0000, Mark Rutland wrote:
Thomas, Peter, I have a couple of things I'd like to check:
(1) The generic irq entry code will preempt from any exception (e.g. a
synchronous fault) where interrupts were unmasked in the original
context. Is that intentional/necessary, or was that just the way the
x86 code happened to be implemented?
I assume that it'd be fine if arm64 only preempted from true
interrupts, but if that was intentional/necessary I can go rework
this.So NMI-from-kernel must not trigger resched IIRC. There is some code that relies on this somewhere. And on x86 many of those synchronous exceptions are marked as NMI, since they can happen with IRQs disabled inside locks etc. But for the rest I don't think we care particularly. Notably page-fault will already schedule itself when possible (faults leading to IO and blocking).
(2) The generic irq entry code only preempts when RCU was watching in
the original context. IIUC that's just to avoid preempting from the
idle thread. Is it functionally necessary to avoid that, or is that
just an optimization?
I'm asking because historically arm64 didn't check that, and I
haven't bothered checking here. I don't know whether we have a
latent functional bug.Like I told you on IRC, I *think* this is just an optimization, since if you hit idle, the idle loop will take care of scheduling. But I can't quite remember the details here, and wish we'd have written a sensible comment at that spot. Other places where RCU isn't watching are userspace and KVM. The first isn't relevant because this is return-to-kernel, and the second I'm not sure about. Thomas, can you remember?