diff options
Diffstat (limited to 'drivers/net/xen-netfront.c')
| -rw-r--r-- | drivers/net/xen-netfront.c | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 36808bf25677..d85e66979711 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -952,7 +952,7 @@ static int handle_incoming_queue(struct net_device *dev,  		u64_stats_update_end(&stats->syncp);  		/* Pass it up. */ -		netif_receive_skb(skb); +		napi_gro_receive(&np->napi, skb);  	}  	return packets_dropped; @@ -1051,6 +1051,8 @@ err:  	if (work_done < budget) {  		int more_to_do = 0; +		napi_gro_flush(napi, false); +  		local_irq_save(flags);  		RING_FINAL_CHECK_FOR_RESPONSES(&np->rx, more_to_do); @@ -1338,6 +1340,12 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)  	if (np->stats == NULL)  		goto exit; +	for_each_possible_cpu(i) { +		struct netfront_stats *xen_nf_stats; +		xen_nf_stats = per_cpu_ptr(np->stats, i); +		u64_stats_init(&xen_nf_stats->syncp); +	} +  	/* Initialise tx_skbs as a free chain containing every entry. */  	np->tx_skb_freelist = 0;  	for (i = 0; i < NET_TX_RING_SIZE; i++) {  | 
