Re: motive for sending Ethernet packets in soft-irq context

David Miller
2008-05-02T11:23:52Z

From: Parav Pandit <paravpandit@yahoo.com>
Date: Fri, 2 May 2008 02:16:07 -0700 (PDT)

[ Your question belongs on netdev, that's where the kernel
networking developers hang out, CC:'d ]

> What I understand is,
> It is not done into the process context of send() system call beacause,

Where did you obtain this understanding? It's not accurate :-)

It is actually done in the send() system call thread of execution most
of the time. soft-irqs are simply disabled during the
->hard_start_xmit() driver call so that input packet processing cannot
execute on the local cpu while this happens.

However, many packets are sent in response to received
packets. In this case, since receive packets are
processed in soft-irq context, the response will be
sent in such a context too.

This applies for TCP data queued up waiting for the congestion
window or TCP window to open up. When an ACK arrives which
satisfies the necessary conditions, queued up socket
data packets are send, again in soft-irq context.

So whether we send to the network card in soft-irq context
or not is entirely situation dependent.