diff options
Diffstat (limited to 'drivers/net/usb/usbnet.c')
| -rw-r--r-- | drivers/net/usb/usbnet.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 8a22ff67b026..d9eea8cfe6cb 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -315,6 +315,7 @@ static void __usbnet_status_stop_force(struct usbnet *dev)  void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)  {  	struct pcpu_sw_netstats *stats64 = this_cpu_ptr(dev->stats64); +	unsigned long flags;  	int	status;  	if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { @@ -326,10 +327,10 @@ void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)  	if (skb->protocol == 0)  		skb->protocol = eth_type_trans (skb, dev->net); -	u64_stats_update_begin(&stats64->syncp); +	flags = u64_stats_update_begin_irqsave(&stats64->syncp);  	stats64->rx_packets++;  	stats64->rx_bytes += skb->len; -	u64_stats_update_end(&stats64->syncp); +	u64_stats_update_end_irqrestore(&stats64->syncp, flags);  	netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",  		  skb->len + sizeof (struct ethhdr), skb->protocol); @@ -1248,11 +1249,12 @@ static void tx_complete (struct urb *urb)  	if (urb->status == 0) {  		struct pcpu_sw_netstats *stats64 = this_cpu_ptr(dev->stats64); +		unsigned long flags; -		u64_stats_update_begin(&stats64->syncp); +		flags = u64_stats_update_begin_irqsave(&stats64->syncp);  		stats64->tx_packets += entry->packets;  		stats64->tx_bytes += entry->length; -		u64_stats_update_end(&stats64->syncp); +		u64_stats_update_end_irqrestore(&stats64->syncp, flags);  	} else {  		dev->net->stats.tx_errors++;  |