Interrupt Handler of Ethernet Device

Rami Rosen roszenrami at gmail.com
Mon Apr 8 02:41:34 EDT 2013


Hi,
>When working in interrupt driven model, the nic registers an
>interrupt handler;
The nic registers an interrupt handle also when working in polling mode;
See all the new drivers like e1000, e1000e and more.

when working in interrupt mode, each packet received triggers an interrupt;
when working in polling mode, we start in interrupt model; but only
the first packet triggers interrupt, afterward we work in poll mode.
If traffic is low
we switch again to interrupt mode.

There are cases when netif_rx() is used for interrupt driven driver;
look in:
http://lxr.free-electrons.com/source/drivers/net/ethernet/davicom/dm9000.c

dm9000_rx() is called from the interrupt isr, dm9000_interrupt.

And grepping for the network drivers subtree will easily find some
more examples.

Regards,
Rami Rosen
http://ramirose.wix.com/ramirosen



On Mon, Apr 8, 2013 at 8:42 AM, Robert Clove <cloverobert at gmail.com> wrote:
> As far i have read the packet reception i have found out that
> When working in interrupt driven model, the nic registers an
> interrupt handler;
> • This interrupt handler will be called when a frame is received;
> • Typically in the handler, we allocate sk buff by calling
> dev alloc skb();
> • Copies data from nic’s buffer to this struct just created;
> • nic call generic reception routine netif rx();
> • netif rx() put frame in per cpu queue;
> • if queue is full, drop!
>
> BUT i didn't found the netif_rx() in the following link
> http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c#L2204
>
>
>
>
> On Sun, Apr 7, 2013 at 8:52 PM, Rami Rosen <roszenrami at gmail.com> wrote:
>>
>> Hi,
>> we have in :
>>  http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c
>>
>> struct nic {
>>         /* Begin: frequently used values: keep adjacent for cache effect
>> */
>>         u32 msg_enable                          ____cacheline_aligned;
>>         struct net_device *netdev;
>>          struct pci_dev *pdev;
>>      ...
>>      ...
>>
>> And indeed  nic->netdev represents an Ethernet interface, which
>> is the struct net_device (see: include/linux/netdevice.h)
>>
>> Regards,
>> Rami Rosen
>> http://ramirose.wix.com/ramirosen
>>
>>
>> On Sun, Apr 7, 2013 at 5:52 AM, ishare <june.tune.sea at gmail.com> wrote:
>> > On Fri, Apr 05, 2013 at 03:06:37PM +0300, Rami Rosen wrote:
>> >> Robert,
>> >> You should look for the request_irq() method in the driver.
>> >> This method registers an interrupt handler.
>> >> For example, you can look in:
>> >> http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c
>> >> ...
>> >> ...
>> >>     if ((err = request_irq(nic->pdev->irq, e100_intr, IRQF_SHARED,
>> >>                  nic->netdev->name, nic->netdev)))
>> >>
>> >> ...
>> >>
>> >> This means that e100_intr is registered as an interrupt handler.
>> >
>> >   Is this nic->netdev represent a  Ethernet interface ?
>> >
>> >
>> >>
>> >> Best,
>> >> Rami Rosen
>> >> http://ramirose.wix.com/ramirosen
>> >>
>> >>
>> >> On Fri, Apr 5, 2013 at 11:50 AM, Robert Clove <cloverobert at gmail.com>
>> >> wrote:
>> >> > Hello All,
>> >> >
>> >> >
>> >> > I am new here.
>> >> > I want to know the interrupt handler of the ethernet card and where
>> >> > can i
>> >> > find the definition of it so as i can clear the flow of packet
>> >> > reception.
>> >> >
>> >> > Thanks
>> >> > Robert
>> >> >
>> >> > _______________________________________________
>> >> > Kernelnewbies mailing list
>> >> > Kernelnewbies at kernelnewbies.org
>> >> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>> >> >
>> >>
>> >> _______________________________________________
>> >> Kernelnewbies mailing list
>> >> Kernelnewbies at kernelnewbies.org
>> >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>



More information about the Kernelnewbies mailing list