|
@@ -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++;
|
|
|
|