net: Remove ndo_xmit_flush netdev operation, use signalling instead.
authorDavid S. Miller <davem@davemloft.net>
Mon, 25 Aug 2014 22:51:53 +0000 (15:51 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Aug 2014 23:29:42 +0000 (16:29 -0700)
commita39dcf46ed132d6c8731b8e0646d15899dbf3d41
treeefe818013ee258eeff23f83ca0c8d01b5117a316
parent8e51bb10b9b253d2d6f0103e5c929736530deab3
net: Remove ndo_xmit_flush netdev operation, use signalling instead.

As reported by Jesper Dangaard Brouer, for high packet rates the
overhead of having another indirect call in the TX path is
non-trivial.

There is the indirect call itself, and then there is all of the
reloading of the state to refetch the tail pointer value and
then write the device register.

Move to a more passive scheme, which requires very light modifications
to the device drivers.

The signal is a new skb->xmit_more value, if it is non-zero it means
that more SKBs are pending to be transmitted on the same queue as the
current SKB.  And therefore, the driver may elide the tail pointer
update.

Right now skb->xmit_more is always zero.

Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/virtio_net.c
include/linux/netdevice.h
include/linux/skbuff.h