aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/nlmon.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/nlmon.c')
-rw-r--r--drivers/net/nlmon.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/drivers/net/nlmon.c b/drivers/net/nlmon.c
index d2bb12bfabd5..34924dfadd00 100644
--- a/drivers/net/nlmon.c
+++ b/drivers/net/nlmon.c
@@ -47,16 +47,7 @@ static int nlmon_change_mtu(struct net_device *dev, int new_mtu)
47 47
48static int nlmon_dev_init(struct net_device *dev) 48static int nlmon_dev_init(struct net_device *dev)
49{ 49{
50 int i; 50 dev->lstats = netdev_alloc_pcpu_stats(struct pcpu_lstats);
51
52 dev->lstats = alloc_percpu(struct pcpu_lstats);
53
54 for_each_possible_cpu(i) {
55 struct pcpu_lstats *nlmstats;
56 nlmstats = per_cpu_ptr(dev->lstats, i);
57 u64_stats_init(&nlmstats->syncp);
58 }
59
60 return dev->lstats == NULL ? -ENOMEM : 0; 51 return dev->lstats == NULL ? -ENOMEM : 0;
61} 52}
62 53
@@ -99,10 +90,10 @@ nlmon_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
99 nl_stats = per_cpu_ptr(dev->lstats, i); 90 nl_stats = per_cpu_ptr(dev->lstats, i);
100 91
101 do { 92 do {
102 start = u64_stats_fetch_begin_bh(&nl_stats->syncp); 93 start = u64_stats_fetch_begin_irq(&nl_stats->syncp);
103 tbytes = nl_stats->bytes; 94 tbytes = nl_stats->bytes;
104 tpackets = nl_stats->packets; 95 tpackets = nl_stats->packets;
105 } while (u64_stats_fetch_retry_bh(&nl_stats->syncp, start)); 96 } while (u64_stats_fetch_retry_irq(&nl_stats->syncp, start));
106 97
107 packets += tpackets; 98 packets += tpackets;
108 bytes += tbytes; 99 bytes += tbytes;
@@ -145,7 +136,8 @@ static void nlmon_setup(struct net_device *dev)
145 dev->ethtool_ops = &nlmon_ethtool_ops; 136 dev->ethtool_ops = &nlmon_ethtool_ops;
146 dev->destructor = free_netdev; 137 dev->destructor = free_netdev;
147 138
148 dev->features = NETIF_F_FRAGLIST | NETIF_F_HIGHDMA; 139 dev->features = NETIF_F_SG | NETIF_F_FRAGLIST |
140 NETIF_F_HIGHDMA | NETIF_F_LLTX;
149 dev->flags = IFF_NOARP; 141 dev->flags = IFF_NOARP;
150 142
151 /* That's rather a softlimit here, which, of course, 143 /* That's rather a softlimit here, which, of course,