Re: [PATCH v6 3/6] rust: irq: add support for non-threaded IRQs and handlers

Dirk Behme
2025-07-19T05:47:04Z

Hi Daniel,

On 13.07.25 17:32, Daniel Almeida wrote:
>
>
>> On 13 Jul 2025, at 12:28, Daniel Almeida <daniel.almeida@collabora.com> wrote:
>>
>>
>>
>>>
>>> (2) Owning a reference count of a device (i.e. ARef<Device>) does *not*
>>> guarantee that the device is bound. You can own a reference count to the
>>> device object way beyond it being bound. Instead, the guarantee comes from
>>> the scope.
>>>
>>> In this case, the scope is the IRQ callback, since the irq::Registration
>>> guarantees to call and complete free_irq() before the underlying bus
>>> device is unbound.
>>>
>>
>>
>> Oh, I see. I guess this is where I started to get a bit confused indeed.
>>
>> — Daniel
>
> Fine, I guess I can submit a newer version and test that on Tyr.
>
> Dirk, can you also test the next iteration on your driver? It will possibly
> solve your use case as well.

Now, I'm slightly confused ;) I just saw your version 7 of this

[PATCH v7 3/6] rust: irq: add support for non-threaded IRQs and handlers
https://lore.kernel.org/rust-for-linux/20250715-topics-tyr-request_irq2-v7-3-d469c0f37c07@collabora.com/

and somehow was expecting something like

fn handle(&self, dev: &Device<Bound>) -> IrqReturn

there. I.e. to get a bound device passed into the handler.

If I misunderstood the discussion and this is supposed to not be
added: Any hint how to get the &Device<Bound> from the probe
function/irq registration into the irq handler, then? To be able to do
something like

fn handle(&self) -> IrqReturn {
let dev = ??;
let io = self.iomem.access(dev);

Thanks,

Dirk