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

From: David Miller
Date: Fri May 02 2008 - 07:23:56 EST


From: Parav Pandit <paravpandit@xxxxxxxxx>
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.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/