diff options
| author | Danilo Krummrich <dakr@kernel.org> | 2025-11-03 21:30:12 +0100 |
|---|---|---|
| committer | Danilo Krummrich <dakr@kernel.org> | 2025-11-06 10:19:36 +0100 |
| commit | 1f7b01661f5f62211ca079afee922e1b44e3ae5d (patch) | |
| tree | 8e1c22694485239209e517e7cfbe73f4a790d812 | |
| parent | 1bf5b90cd2f984e5d6ff6fd30d5d85f9f579b6f0 (diff) | |
rust: pci: get rid of redundant Result in IRQ methods
Currently request_irq() returns
Result<impl PinInit<irq::Registration<T>, Error> + 'a>
which may carry an error in the Result or the initializer; the same is
true for request_threaded_irq().
Use pin_init::pin_init_scope() to get rid of this redundancy.
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Link: https://patch.msgid.link/20251103203053.2348783-1-dakr@kernel.org
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
| -rw-r--r-- | rust/kernel/pci/irq.rs | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/rust/kernel/pci/irq.rs b/rust/kernel/pci/irq.rs index 782a524fe11c..03f2de559a8a 100644 --- a/rust/kernel/pci/irq.rs +++ b/rust/kernel/pci/irq.rs @@ -175,10 +175,12 @@ impl Device<device::Bound> { flags: irq::Flags, name: &'static CStr, handler: impl PinInit<T, Error> + 'a, - ) -> Result<impl PinInit<irq::Registration<T>, Error> + 'a> { - let request = vector.try_into()?; + ) -> impl PinInit<irq::Registration<T>, Error> + 'a { + pin_init::pin_init_scope(move || { + let request = vector.try_into()?; - Ok(irq::Registration::<T>::new(request, flags, name, handler)) + Ok(irq::Registration::<T>::new(request, flags, name, handler)) + }) } /// Returns a [`kernel::irq::ThreadedRegistration`] for the given IRQ vector. @@ -188,12 +190,14 @@ impl Device<device::Bound> { flags: irq::Flags, name: &'static CStr, handler: impl PinInit<T, Error> + 'a, - ) -> Result<impl PinInit<irq::ThreadedRegistration<T>, Error> + 'a> { - let request = vector.try_into()?; - - Ok(irq::ThreadedRegistration::<T>::new( - request, flags, name, handler, - )) + ) -> impl PinInit<irq::ThreadedRegistration<T>, Error> + 'a { + pin_init::pin_init_scope(move || { + let request = vector.try_into()?; + + Ok(irq::ThreadedRegistration::<T>::new( + request, flags, name, handler, + )) + }) } /// Allocate IRQ vectors for this PCI device with automatic cleanup. |
