Re: Shared Interrupt Lines [was IRQ_NONE or IRQ_HANDLED]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Sep 12, 2010 at 02:45:15PM +0200, Carlo Caione wrote:
> 
> Let's assume that I have registered two handlers on a shared IRQ.
> 
> request_irq(irqn, handler1, IRQF_SHARED, "first", dev1);
> request_irq(irqn, handler2, IRQF_SHARED, "second", dev2);
> 
> using two different dev1 and dev2 device structures.
> 
> When the interrupt is raised what is passed to handler1() and handler2() as second
> argument? dev1 is passed to handler1() and dev2 to handler2() or both receive the
> same value as pointer?

Your handler1 will be called with dev1 as the second argument, and your
handler2 will be called with dev2 as the second argument (but both will
be called with the asserted IRQ as their first argument).

> If each one receives the pointer to device structure indicated in request_irq() 
> how this can help to differentiate between multiple device?

The provided dev pointer to request_irq() is not itself useful to the
core IRQ code, it doesn't do anything but store it away for use when
calling your handler function.

That being said, the IRQ-core core does need some way to differentiate
between handlers for shared IRQs.  This is necessary so that you can
selectively uninstall handlers.  This is also why the free_irq() takes
not only the IRQ#, but the dev_id (your dev1 or dev2) you registered
with.

Hopefully that answers your question. :)

-- 
                                        -joshc

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux