diff options
Diffstat (limited to 'drivers/net/virtio_net.c')
-rw-r--r-- | drivers/net/virtio_net.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 8d009760277c..b9e002fccbca 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/ethtool.h> | 22 | #include <linux/ethtool.h> |
23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
24 | #include <linux/virtio.h> | 24 | #include <linux/virtio.h> |
25 | #include <linux/virtio_ids.h> | ||
26 | #include <linux/virtio_net.h> | 25 | #include <linux/virtio_net.h> |
27 | #include <linux/scatterlist.h> | 26 | #include <linux/scatterlist.h> |
28 | #include <linux/if_vlan.h> | 27 | #include <linux/if_vlan.h> |
@@ -454,7 +453,7 @@ static unsigned int free_old_xmit_skbs(struct virtnet_info *vi) | |||
454 | vi->dev->stats.tx_bytes += skb->len; | 453 | vi->dev->stats.tx_bytes += skb->len; |
455 | vi->dev->stats.tx_packets++; | 454 | vi->dev->stats.tx_packets++; |
456 | tot_sgs += skb_vnet_hdr(skb)->num_sg; | 455 | tot_sgs += skb_vnet_hdr(skb)->num_sg; |
457 | kfree_skb(skb); | 456 | dev_kfree_skb_any(skb); |
458 | } | 457 | } |
459 | return tot_sgs; | 458 | return tot_sgs; |
460 | } | 459 | } |
@@ -517,8 +516,7 @@ again: | |||
517 | /* Free up any pending old buffers before queueing new ones. */ | 516 | /* Free up any pending old buffers before queueing new ones. */ |
518 | free_old_xmit_skbs(vi); | 517 | free_old_xmit_skbs(vi); |
519 | 518 | ||
520 | /* Put new one in send queue and do transmit */ | 519 | /* Try to transmit */ |
521 | __skb_queue_head(&vi->send, skb); | ||
522 | capacity = xmit_skb(vi, skb); | 520 | capacity = xmit_skb(vi, skb); |
523 | 521 | ||
524 | /* This can happen with OOM and indirect buffers. */ | 522 | /* This can happen with OOM and indirect buffers. */ |
@@ -532,8 +530,17 @@ again: | |||
532 | } | 530 | } |
533 | return NETDEV_TX_BUSY; | 531 | return NETDEV_TX_BUSY; |
534 | } | 532 | } |
535 | |||
536 | vi->svq->vq_ops->kick(vi->svq); | 533 | vi->svq->vq_ops->kick(vi->svq); |
534 | |||
535 | /* | ||
536 | * Put new one in send queue. You'd expect we'd need this before | ||
537 | * xmit_skb calls add_buf(), since the callback can be triggered | ||
538 | * immediately after that. But since the callback just triggers | ||
539 | * another call back here, normal network xmit locking prevents the | ||
540 | * race. | ||
541 | */ | ||
542 | __skb_queue_head(&vi->send, skb); | ||
543 | |||
537 | /* Don't wait up for transmitted skbs to be freed. */ | 544 | /* Don't wait up for transmitted skbs to be freed. */ |
538 | skb_orphan(skb); | 545 | skb_orphan(skb); |
539 | nf_reset(skb); | 546 | nf_reset(skb); |
@@ -991,7 +998,7 @@ static unsigned int features[] = { | |||
991 | VIRTIO_NET_F_CTRL_RX, VIRTIO_NET_F_CTRL_VLAN, | 998 | VIRTIO_NET_F_CTRL_RX, VIRTIO_NET_F_CTRL_VLAN, |
992 | }; | 999 | }; |
993 | 1000 | ||
994 | static struct virtio_driver virtio_net = { | 1001 | static struct virtio_driver virtio_net_driver = { |
995 | .feature_table = features, | 1002 | .feature_table = features, |
996 | .feature_table_size = ARRAY_SIZE(features), | 1003 | .feature_table_size = ARRAY_SIZE(features), |
997 | .driver.name = KBUILD_MODNAME, | 1004 | .driver.name = KBUILD_MODNAME, |
@@ -1004,12 +1011,12 @@ static struct virtio_driver virtio_net = { | |||
1004 | 1011 | ||
1005 | static int __init init(void) | 1012 | static int __init init(void) |
1006 | { | 1013 | { |
1007 | return register_virtio_driver(&virtio_net); | 1014 | return register_virtio_driver(&virtio_net_driver); |
1008 | } | 1015 | } |
1009 | 1016 | ||
1010 | static void __exit fini(void) | 1017 | static void __exit fini(void) |
1011 | { | 1018 | { |
1012 | unregister_virtio_driver(&virtio_net); | 1019 | unregister_virtio_driver(&virtio_net_driver); |
1013 | } | 1020 | } |
1014 | module_init(init); | 1021 | module_init(init); |
1015 | module_exit(fini); | 1022 | module_exit(fini); |