aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/virtio_net.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/virtio_net.c')
-rw-r--r--drivers/net/virtio_net.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 916241d16c67..d208f8604981 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -426,10 +426,10 @@ static void receive_buf(struct receive_queue *rq, void *buf, unsigned int len)
426 if (unlikely(len < sizeof(struct virtio_net_hdr) + ETH_HLEN)) { 426 if (unlikely(len < sizeof(struct virtio_net_hdr) + ETH_HLEN)) {
427 pr_debug("%s: short packet %i\n", dev->name, len); 427 pr_debug("%s: short packet %i\n", dev->name, len);
428 dev->stats.rx_length_errors++; 428 dev->stats.rx_length_errors++;
429 if (vi->big_packets) 429 if (vi->mergeable_rx_bufs)
430 give_pages(rq, buf);
431 else if (vi->mergeable_rx_bufs)
432 put_page(virt_to_head_page(buf)); 430 put_page(virt_to_head_page(buf));
431 else if (vi->big_packets)
432 give_pages(rq, buf);
433 else 433 else
434 dev_kfree_skb(buf); 434 dev_kfree_skb(buf);
435 return; 435 return;
@@ -1367,6 +1367,11 @@ static void virtnet_config_changed(struct virtio_device *vdev)
1367 1367
1368static void virtnet_free_queues(struct virtnet_info *vi) 1368static void virtnet_free_queues(struct virtnet_info *vi)
1369{ 1369{
1370 int i;
1371
1372 for (i = 0; i < vi->max_queue_pairs; i++)
1373 netif_napi_del(&vi->rq[i].napi);
1374
1370 kfree(vi->rq); 1375 kfree(vi->rq);
1371 kfree(vi->sq); 1376 kfree(vi->sq);
1372} 1377}
@@ -1396,10 +1401,10 @@ static void free_unused_bufs(struct virtnet_info *vi)
1396 struct virtqueue *vq = vi->rq[i].vq; 1401 struct virtqueue *vq = vi->rq[i].vq;
1397 1402
1398 while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) { 1403 while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) {
1399 if (vi->big_packets) 1404 if (vi->mergeable_rx_bufs)
1400 give_pages(&vi->rq[i], buf);
1401 else if (vi->mergeable_rx_bufs)
1402 put_page(virt_to_head_page(buf)); 1405 put_page(virt_to_head_page(buf));
1406 else if (vi->big_packets)
1407 give_pages(&vi->rq[i], buf);
1403 else 1408 else
1404 dev_kfree_skb(buf); 1409 dev_kfree_skb(buf);
1405 --vi->rq[i].num; 1410 --vi->rq[i].num;