]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/xen-netfront.c
Merge tag 'fixes-for-3.15' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[karo-tx-linux.git] / drivers / net / xen-netfront.c
index e30d80033cbc4bb4f93d4e84897ff6fb29417a91..158b5e639fc7307d5a98580cfd65ca23b9d3db8a 100644 (file)
@@ -658,7 +658,7 @@ static int xennet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
  drop:
        dev->stats.tx_dropped++;
-       dev_kfree_skb(skb);
+       dev_kfree_skb_any(skb);
        return NETDEV_TX_OK;
 }
 
@@ -1060,13 +1060,13 @@ static struct rtnl_link_stats64 *xennet_get_stats64(struct net_device *dev,
                unsigned int start;
 
                do {
-                       start = u64_stats_fetch_begin_bh(&stats->syncp);
+                       start = u64_stats_fetch_begin_irq(&stats->syncp);
 
                        rx_packets = stats->rx_packets;
                        tx_packets = stats->tx_packets;
                        rx_bytes = stats->rx_bytes;
                        tx_bytes = stats->tx_bytes;
-               } while (u64_stats_fetch_retry_bh(&stats->syncp, start));
+               } while (u64_stats_fetch_retry_irq(&stats->syncp, start));
 
                tot->rx_packets += rx_packets;
                tot->tx_packets += tx_packets;
@@ -1282,28 +1282,22 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
        np->rx_refill_timer.function = rx_refill_timeout;
 
        err = -ENOMEM;
-       np->stats = alloc_percpu(struct netfront_stats);
+       np->stats = netdev_alloc_pcpu_stats(struct netfront_stats);
        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++) {
                skb_entry_set_link(&np->tx_skbs[i], i+1);
                np->grant_tx_ref[i] = GRANT_INVALID_REF;
+               np->grant_tx_page[i] = NULL;
        }
 
        /* Clear out rx_skbs */
        for (i = 0; i < NET_RX_RING_SIZE; i++) {
                np->rx_skbs[i] = NULL;
                np->grant_rx_ref[i] = GRANT_INVALID_REF;
-               np->grant_tx_page[i] = NULL;
        }
 
        /* A grant for every tx ring slot */