diff options
| author | Paul Moore <pmoore@redhat.com> | 2014-01-28 14:44:16 -0500 |
|---|---|---|
| committer | Paul Moore <pmoore@redhat.com> | 2014-02-05 10:39:48 -0500 |
| commit | 825e587af2e90e9b953849f3347a01d8f383d577 (patch) | |
| tree | e48942a05882da47544e179c6a0c920e00137a6a /drivers/net/xen-netfront.c | |
| parent | 8ed814602876bec9bad2649ca17f34b499357a1c (diff) | |
| parent | d8ec26d7f8287f5788a494f56e8814210f0e64be (diff) | |
Merge tag 'v3.13' into stable-3.14
Linux 3.13
Conflicts:
security/selinux/hooks.c
Trivial merge issue in selinux_inet_conn_request() likely due to me
including patches that I sent to the stable folks in my next tree
resulting in the patch hitting twice (I think). Thankfully it was an
easy fix this time, but regardless, lesson learned, I will not do that
again.
Diffstat (limited to 'drivers/net/xen-netfront.c')
| -rw-r--r-- | drivers/net/xen-netfront.c | 17 |
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); |
| 279 | no_skb: | 279 | no_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++) { |
