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 { flags: irq::Flags, name: &'static CStr, handler: impl PinInit + 'a, - ) -> Result, Error> + 'a> { - let request = vector.try_into()?; + ) -> impl PinInit, Error> + 'a { + pin_init::pin_init_scope(move || { + let request = vector.try_into()?; - Ok(irq::Registration::::new(request, flags, name, handler)) + Ok(irq::Registration::::new(request, flags, name, handler)) + }) } /// Returns a [`kernel::irq::ThreadedRegistration`] for the given IRQ vector. @@ -188,12 +190,14 @@ impl Device { flags: irq::Flags, name: &'static CStr, handler: impl PinInit + 'a, - ) -> Result, Error> + 'a> { - let request = vector.try_into()?; + ) -> impl PinInit, Error> + 'a { + pin_init::pin_init_scope(move || { + let request = vector.try_into()?; - Ok(irq::ThreadedRegistration::::new( - request, flags, name, handler, - )) + Ok(irq::ThreadedRegistration::::new( + request, flags, name, handler, + )) + }) } /// Allocate IRQ vectors for this PCI device with automatic cleanup.