On Wed, Jul 23, 2025 at 10:55:20AM -0300, Daniel Almeida wrote: > Hi Boqun, > > [...] > > >> + IrqRequest { dev, irq } > >> + } > >> + > >> + /// Returns the IRQ number of an [`IrqRequest`]. > >> + pub fn irq(&self) -> u32 { > >> + self.irq > >> + } > >> +} > >> + > >> +/// A registration of an IRQ handler for a given IRQ line. > >> +/// > >> +/// # Examples > >> +/// > >> +/// The following is an example of using `Registration`. It uses a > >> +/// [`AtomicU32`](core::sync::AtomicU32) to provide the interior mutability. > > > > We are going to remove all usage of core::sync::Atomic* when the LKMM > > atomics [1] land. You can probably use `Completion` here (handler does > > complete_all(), and registration uses wait_for_completion()) because > > `Completion` is irq-safe. And this brings my next comment.. > > How are completions equivalent to atomics? I am trying to highlight interior > mutability in this example. > Well, `Completion` also has interior mutability. > Is the LKMM atomic series getting merged during the upcoming merge window? Because my > understanding was that the IRQ series was ready to go in 6.17, pending a reply Nope, it's likely to be in 6.18. > from Thomas and some minor comments that have been mentioned in v7. > > If the LKMM series is not ready yet, my proposal is to leave the > Atomics->Completion change for a future patch (or really, to just use the new > Atomic types introduced by your series, because again, I don't think Completion > is the right thing to have there). > Why? I can find a few examples that an irq handler does a complete_all(), e.g. gpi_process_ch_ctrl_irq() in drivers/dma/qcom/gpi.c. I think it's very normal for a driver thread to use completions to wait for an irq to happen. But sure, this and the handler pinned initializer thing is not a blocker issue. However, I would like to see them resolved as soon as possible once merged. Regards, Boqun > > - Daniel