aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netfront.c
diff options
context:
space:
mode:
authorMichal Marek <mmarek@suse.cz>2014-01-02 08:02:06 -0500
committerMichal Marek <mmarek@suse.cz>2014-01-02 08:02:06 -0500
commit37e2c2a775fc887acd1432908478dfd532f7f00f (patch)
treee51ebc699d8e262fd47e0913be6a711cb1a7b565 /drivers/net/xen-netfront.c
parent1c8ddae09f4c102b97c9086cc70347e89468a547 (diff)
parent6ce4eac1f600b34f2f7f58f9cd8f0503d79e42ae (diff)
Merge commit v3.13-rc1 into kbuild/misc
Diffstat (limited to 'drivers/net/xen-netfront.c')
-rw-r--r--drivers/net/xen-netfront.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index 36808bf25677..e59acb1daa23 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -277,12 +277,13 @@ static void xennet_alloc_rx_buffers(struct net_device *dev)
277 if (!page) { 277 if (!page) {
278 kfree_skb(skb); 278 kfree_skb(skb);
279no_skb: 279no_skb:
280 /* Any skbuffs queued for refill? Force them out. */
281 if (i != 0)
282 goto refill;
283 /* Could not allocate any skbuffs. Try again later. */ 280 /* Could not allocate any skbuffs. Try again later. */
284 mod_timer(&np->rx_refill_timer, 281 mod_timer(&np->rx_refill_timer,
285 jiffies + (HZ/10)); 282 jiffies + (HZ/10));
283
284 /* Any skbuffs queued for refill? Force them out. */
285 if (i != 0)
286 goto refill;
286 break; 287 break;
287 } 288 }
288 289
@@ -952,7 +953,7 @@ static int handle_incoming_queue(struct net_device *dev,
952 u64_stats_update_end(&stats->syncp); 953 u64_stats_update_end(&stats->syncp);
953 954
954 /* Pass it up. */ 955 /* Pass it up. */
955 netif_receive_skb(skb); 956 napi_gro_receive(&np->napi, skb);
956 } 957 }
957 958
958 return packets_dropped; 959 return packets_dropped;
@@ -1051,6 +1052,8 @@ err:
1051 if (work_done < budget) { 1052 if (work_done < budget) {
1052 int more_to_do = 0; 1053 int more_to_do = 0;
1053 1054
1055 napi_gro_flush(napi, false);
1056
1054 local_irq_save(flags); 1057 local_irq_save(flags);
1055 1058
1056 RING_FINAL_CHECK_FOR_RESPONSES(&np->rx, more_to_do); 1059 RING_FINAL_CHECK_FOR_RESPONSES(&np->rx, more_to_do);
@@ -1338,6 +1341,12 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
1338 if (np->stats == NULL) 1341 if (np->stats == NULL)
1339 goto exit; 1342 goto exit;
1340 1343
1344 for_each_possible_cpu(i) {
1345 struct netfront_stats *xen_nf_stats;
1346 xen_nf_stats = per_cpu_ptr(np->stats, i);
1347 u64_stats_init(&xen_nf_stats->syncp);
1348 }
1349
1341 /* Initialise tx_skbs as a free chain containing every entry. */ 1350 /* Initialise tx_skbs as a free chain containing every entry. */
1342 np->tx_skb_freelist = 0; 1351 np->tx_skb_freelist = 0;
1343 for (i = 0; i < NET_TX_RING_SIZE; i++) { 1352 for (i = 0; i < NET_TX_RING_SIZE; i++) {