Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'drivers-net-add-sw_netstats_rx_add-helper'

Fabian Frederick says:

====================
drivers/net: add sw_netstats_rx_add helper

This small patchset creates netstats addition dev_sw_netstats_rx_add()
based on dev_lstats_add() and replaces some open coding
in both drivers/net and net branches.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+23 -67
+3 -8
drivers/net/bareudp.c
··· 54 54 static int bareudp_udp_encap_recv(struct sock *sk, struct sk_buff *skb) 55 55 { 56 56 struct metadata_dst *tun_dst = NULL; 57 - struct pcpu_sw_netstats *stats; 58 57 struct bareudp_dev *bareudp; 59 58 unsigned short family; 60 59 unsigned int len; ··· 159 160 160 161 len = skb->len; 161 162 err = gro_cells_receive(&bareudp->gro_cells, skb); 162 - if (likely(err == NET_RX_SUCCESS)) { 163 - stats = this_cpu_ptr(bareudp->dev->tstats); 164 - u64_stats_update_begin(&stats->syncp); 165 - stats->rx_packets++; 166 - stats->rx_bytes += len; 167 - u64_stats_update_end(&stats->syncp); 168 - } 163 + if (likely(err == NET_RX_SUCCESS)) 164 + dev_sw_netstats_rx_add(bareudp->dev, len); 165 + 169 166 return 0; 170 167 drop: 171 168 /* Consume bad packet */
+3 -8
drivers/net/geneve.c
··· 217 217 { 218 218 struct genevehdr *gnvh = geneve_hdr(skb); 219 219 struct metadata_dst *tun_dst = NULL; 220 - struct pcpu_sw_netstats *stats; 221 220 unsigned int len; 222 221 int err = 0; 223 222 void *oiph; ··· 295 296 296 297 len = skb->len; 297 298 err = gro_cells_receive(&geneve->gro_cells, skb); 298 - if (likely(err == NET_RX_SUCCESS)) { 299 - stats = this_cpu_ptr(geneve->dev->tstats); 300 - u64_stats_update_begin(&stats->syncp); 301 - stats->rx_packets++; 302 - stats->rx_bytes += len; 303 - u64_stats_update_end(&stats->syncp); 304 - } 299 + if (likely(err == NET_RX_SUCCESS)) 300 + dev_sw_netstats_rx_add(geneve->dev, len); 301 + 305 302 return; 306 303 drop: 307 304 /* Consume bad packet */
+1 -7
drivers/net/gtp.c
··· 182 182 static int gtp_rx(struct pdp_ctx *pctx, struct sk_buff *skb, 183 183 unsigned int hdrlen, unsigned int role) 184 184 { 185 - struct pcpu_sw_netstats *stats; 186 - 187 185 if (!gtp_check_ms(skb, pctx, hdrlen, role)) { 188 186 netdev_dbg(pctx->dev, "No PDP ctx for this MS\n"); 189 187 return 1; ··· 202 204 203 205 skb->dev = pctx->dev; 204 206 205 - stats = this_cpu_ptr(pctx->dev->tstats); 206 - u64_stats_update_begin(&stats->syncp); 207 - stats->rx_packets++; 208 - stats->rx_bytes += skb->len; 209 - u64_stats_update_end(&stats->syncp); 207 + dev_sw_netstats_rx_add(pctx->dev, skb->len); 210 208 211 209 netif_rx(skb); 212 210 return 0;
+1 -7
drivers/net/vxlan.c
··· 1826 1826 /* Callback from net/ipv4/udp.c to receive packets */ 1827 1827 static int vxlan_rcv(struct sock *sk, struct sk_buff *skb) 1828 1828 { 1829 - struct pcpu_sw_netstats *stats; 1830 1829 struct vxlan_dev *vxlan; 1831 1830 struct vxlan_sock *vs; 1832 1831 struct vxlanhdr unparsed; ··· 1939 1940 goto drop; 1940 1941 } 1941 1942 1942 - stats = this_cpu_ptr(vxlan->dev->tstats); 1943 - u64_stats_update_begin(&stats->syncp); 1944 - stats->rx_packets++; 1945 - stats->rx_bytes += skb->len; 1946 - u64_stats_update_end(&stats->syncp); 1947 - 1943 + dev_sw_netstats_rx_add(vxlan->dev, skb->len); 1948 1944 gro_cells_receive(&vxlan->gro_cells, skb); 1949 1945 1950 1946 rcu_read_unlock();
+10
include/linux/netdevice.h
··· 2543 2543 2544 2544 void dev_lstats_read(struct net_device *dev, u64 *packets, u64 *bytes); 2545 2545 2546 + static inline void dev_sw_netstats_rx_add(struct net_device *dev, unsigned int len) 2547 + { 2548 + struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats); 2549 + 2550 + u64_stats_update_begin(&tstats->syncp); 2551 + tstats->rx_bytes += len; 2552 + tstats->rx_packets++; 2553 + u64_stats_update_end(&tstats->syncp); 2554 + } 2555 + 2546 2556 static inline void dev_lstats_add(struct net_device *dev, unsigned int len) 2547 2557 { 2548 2558 struct pcpu_lstats *lstats = this_cpu_ptr(dev->lstats);
+1 -7
net/ipv4/ip_tunnel.c
··· 360 360 const struct tnl_ptk_info *tpi, struct metadata_dst *tun_dst, 361 361 bool log_ecn_error) 362 362 { 363 - struct pcpu_sw_netstats *tstats; 364 363 const struct iphdr *iph = ip_hdr(skb); 365 364 int err; 366 365 ··· 401 402 } 402 403 } 403 404 404 - tstats = this_cpu_ptr(tunnel->dev->tstats); 405 - u64_stats_update_begin(&tstats->syncp); 406 - tstats->rx_packets++; 407 - tstats->rx_bytes += skb->len; 408 - u64_stats_update_end(&tstats->syncp); 409 - 405 + dev_sw_netstats_rx_add(tunnel->dev, skb->len); 410 406 skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(tunnel->dev))); 411 407 412 408 if (tunnel->dev->type == ARPHRD_ETHER) {
+1 -8
net/ipv4/ip_vti.c
··· 95 95 { 96 96 unsigned short family; 97 97 struct net_device *dev; 98 - struct pcpu_sw_netstats *tstats; 99 98 struct xfrm_state *x; 100 99 const struct xfrm_mode *inner_mode; 101 100 struct ip_tunnel *tunnel = XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4; ··· 137 138 138 139 skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(skb->dev))); 139 140 skb->dev = dev; 140 - 141 - tstats = this_cpu_ptr(dev->tstats); 142 - 143 - u64_stats_update_begin(&tstats->syncp); 144 - tstats->rx_packets++; 145 - tstats->rx_bytes += skb->len; 146 - u64_stats_update_end(&tstats->syncp); 141 + dev_sw_netstats_rx_add(dev, skb->len); 147 142 148 143 return 0; 149 144 }
+1 -7
net/ipv6/ip6_vti.c
··· 347 347 { 348 348 unsigned short family; 349 349 struct net_device *dev; 350 - struct pcpu_sw_netstats *tstats; 351 350 struct xfrm_state *x; 352 351 const struct xfrm_mode *inner_mode; 353 352 struct ip6_tnl *t = XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6; ··· 389 390 390 391 skb_scrub_packet(skb, !net_eq(t->net, dev_net(skb->dev))); 391 392 skb->dev = dev; 392 - 393 - tstats = this_cpu_ptr(dev->tstats); 394 - u64_stats_update_begin(&tstats->syncp); 395 - tstats->rx_packets++; 396 - tstats->rx_bytes += skb->len; 397 - u64_stats_update_end(&tstats->syncp); 393 + dev_sw_netstats_rx_add(dev, skb->len); 398 394 399 395 return 0; 400 396 }
+1 -7
net/openvswitch/vport-internal_dev.c
··· 225 225 static netdev_tx_t internal_dev_recv(struct sk_buff *skb) 226 226 { 227 227 struct net_device *netdev = skb->dev; 228 - struct pcpu_sw_netstats *stats; 229 228 230 229 if (unlikely(!(netdev->flags & IFF_UP))) { 231 230 kfree_skb(skb); ··· 239 240 skb->pkt_type = PACKET_HOST; 240 241 skb->protocol = eth_type_trans(skb, netdev); 241 242 skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN); 242 - 243 - stats = this_cpu_ptr(netdev->tstats); 244 - u64_stats_update_begin(&stats->syncp); 245 - stats->rx_packets++; 246 - stats->rx_bytes += skb->len; 247 - u64_stats_update_end(&stats->syncp); 243 + dev_sw_netstats_rx_add(netdev, skb->len); 248 244 249 245 netif_rx(skb); 250 246 return NETDEV_TX_OK;
+1 -8
net/xfrm/xfrm_interface.c
··· 210 210 static int xfrmi_rcv_cb(struct sk_buff *skb, int err) 211 211 { 212 212 const struct xfrm_mode *inner_mode; 213 - struct pcpu_sw_netstats *tstats; 214 213 struct net_device *dev; 215 214 struct xfrm_state *x; 216 215 struct xfrm_if *xi; ··· 254 255 } 255 256 256 257 xfrmi_scrub_packet(skb, xnet); 257 - 258 - tstats = this_cpu_ptr(dev->tstats); 259 - 260 - u64_stats_update_begin(&tstats->syncp); 261 - tstats->rx_packets++; 262 - tstats->rx_bytes += skb->len; 263 - u64_stats_update_end(&tstats->syncp); 258 + dev_sw_netstats_rx_add(dev, skb->len); 264 259 265 260 return 0; 266 261 }