Merge branch 'ndo_xmit_flush'
authorDavid S. Miller <davem@davemloft.net>
Mon, 25 Aug 2014 06:02:53 +0000 (23:02 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Aug 2014 06:02:53 +0000 (23:02 -0700)
commitfe88e6dd8b9ac65912d0d9d9372fe421d6eeb21e
treec38c0439f002092e03a52fc0743d429c7d6dfbc1
parent4c83acbc565d53296f1731034c5041a0fbabcaeb
parentc223a078cbe0a87d470b08db7c83c7053931ae63
Merge branch 'ndo_xmit_flush'

Basic deferred TX queue flushing infrastructure.

Over time, and specifically and more recently at the Networking
Workshop during Kernel SUmmit in Chicago, we have discussed the idea
of having some way to optimize transmits of multiple TX packets at
a time.

There are several areas of overhead that could be amortized with such
schemes.  One has to do with locking and transactional overhead, the
other has to do with device specific costs.

This patch set here is more aimed at device specific costs.

Typically a device queues up a packet in the TX queue and then has to
do something to have the device start processing that new entry.
Sometimes this is composed of doing an MMIO write to a "tail"
register, and in other cases it can involve something as expensive as
a hypervisor call.

The basic setup defined here is that when the driver supports deferred
TX queue flushing, ndo_start_xmit should no longer perform that
operation.  Instead a new operation, ndo_xmit_flush, should do it.

I have converted IGB and virtio_net as example initial users.  The IGB
conversion is tested, virtio_net is not but it does compile :-)

All ndo_start_xmit call sites have been abstracted behind a new helper
called netdev_start_xmit().

This just adds the infrastructure, it does not actually add any
instances of actually doing multiple ndo_start_xmit calls per
ndo_xmit_flush invocation.

Signed-off-by: David S. Miller <davem@davemloft.net>