virtio_net: Support netdev_ops->ndo_xmit_flush()
authorDavid S. Miller <davem@davemloft.net>
Sat, 23 Aug 2014 20:18:10 +0000 (13:18 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Aug 2014 06:02:45 +0000 (23:02 -0700)
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/virtio_net.c

index 59caa06f34a6b3b17fa3cbce41ea3fb1b08b14a3..62421086d3e6e2b14a1a8b94d56ce964249457e4 100644 (file)
@@ -934,7 +934,6 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
                dev_kfree_skb_any(skb);
                return NETDEV_TX_OK;
        }
-       virtqueue_kick(sq->vq);
 
        /* Don't wait up for transmitted skbs to be freed. */
        skb_orphan(skb);
@@ -957,6 +956,14 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
        return NETDEV_TX_OK;
 }
 
+static void xmit_flush(struct net_device *dev, u16 qnum)
+{
+       struct virtnet_info *vi = netdev_priv(dev);
+       struct send_queue *sq = &vi->sq[qnum];
+
+       virtqueue_kick(sq->vq);
+}
+
 /*
  * Send command via the control virtqueue and check status.  Commands
  * supported by the hypervisor, as indicated by feature bits, should
@@ -1386,6 +1393,7 @@ static const struct net_device_ops virtnet_netdev = {
        .ndo_open            = virtnet_open,
        .ndo_stop            = virtnet_close,
        .ndo_start_xmit      = start_xmit,
+       .ndo_xmit_flush      = xmit_flush,
        .ndo_validate_addr   = eth_validate_addr,
        .ndo_set_mac_address = virtnet_set_mac_address,
        .ndo_set_rx_mode     = virtnet_set_rx_mode,