virtio_net: Add a virtqueue for outbound control commands
authorAlex Williamson <alex.williamson@hp.com>
Wed, 4 Feb 2009 09:02:34 +0000 (09:02 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 5 Feb 2009 00:35:11 +0000 (16:35 -0800)
commit2a41f71d3bd97dde3305b4e1c43ab0eca46e7c71
treed739c170b843ff322ff0897465adbca5cd7041c7
parent073a24364fe6de7eef0a3dec0ec7d48e56624092
virtio_net: Add a virtqueue for outbound control commands

This will be used for RX mode, MAC filter table, VLAN filtering, etc...

The control transaction consists of one or more "out" sg entries and
one or more "in" sg entries.  The first out entry contains a header
defining the class and command.  Additional out entries may provide
data for the command.  The last in entry provides a status response
back from the command.

Virtqueues typically run asynchronous, running a callback function
when there's data in the channel.  We can't readily make use of this
in the command paths where we need to use this.  Instead, we kick
the virtqueue and spin.  The kick causes an I/O write, triggering an
immediate trap into the hypervisor.

Signed-off-by: Alex Williamson <alex.williamson@hp.com>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/virtio_net.c
include/linux/virtio_net.h