Subject: [PATCH nf-next 1/2] net: treewide: pass number of pkts to dev_sw_netstats_rx_add()

From: Ahmed Zaki <[email-masked]>
Date: Tue, 17 Mar 2026 17:48:50 -0600

Allow callers of dev_sw_netstats_rx_add() to update the netdev stats
with multiple packets.

Signed-off-by: Ahmed Zaki <[email-masked]>
---
 drivers/infiniband/hw/hfi1/driver.c                      | 2 +-
 drivers/net/amt.c                                        | 6 +++---
 drivers/net/ethernet/hisilicon/hibmcge/hbg_txrx.c        | 2 +-
 drivers/net/ethernet/litex/litex_liteeth.c               | 2 +-
 drivers/net/ethernet/realtek/r8169_main.c                | 2 +-
 drivers/net/ethernet/realtek/rtase/rtase_main.c          | 2 +-
 drivers/net/ethernet/ti/am65-cpsw-nuss.c                 | 6 +++---
 drivers/net/ethernet/ti/icssg/icssg_common.c             | 4 ++--
 drivers/net/gtp.c                                        | 2 +-
 drivers/net/macsec.c                                     | 2 +-
 drivers/net/netkit.c                                     | 2 +-
 drivers/net/ppp/ppp_generic.c                            | 2 +-
 drivers/net/tun.c                                        | 8 ++++----
 drivers/net/usb/qmi_wwan.c                               | 2 +-
 drivers/net/wireguard/receive.c                          | 2 +-
 drivers/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c | 2 +-
 drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c | 2 +-
 include/linux/netdevice.h                                | 6 ++++--
 net/bridge/br_input.c                                    | 2 +-
 net/core/filter.c                                        | 2 +-
 net/dsa/tag.c                                            | 2 +-
 net/ipv4/ip_tunnel.c                                     | 2 +-
 net/ipv4/ip_vti.c                                        | 2 +-
 net/ipv6/ip6_tunnel.c                                    | 2 +-
 net/ipv6/ip6_vti.c                                       | 2 +-
 net/ipv6/sit.c                                           | 2 +-
 net/mac80211/rx.c                                        | 8 ++++----
 net/openvswitch/vport-internal_dev.c                     | 2 +-
 net/xfrm/xfrm_interface_core.c                           | 2 +-
 29 files changed, 43 insertions(+), 41 deletions(-)

diff --git a/drivers/infiniband/hw/hfi1/driver.c b/drivers/infiniband/hw/hfi1/driver.c
index 06487e20f723..a5e91ae7619e 100644
--- a/drivers/infiniband/hw/hfi1/driver.c
+++ b/drivers/infiniband/hw/hfi1/driver.c
@@ -1689,7 +1689,7 @@ static void hfi1_ipoib_ib_rcv(struct hfi1_packet *packet)
 	if (unlikely(!skb))
 		goto drop;
 
-	dev_sw_netstats_rx_add(netdev, skb->len);
+	dev_sw_netstats_rx_add(netdev, 1, skb->len);
 
 	skb->dev = netdev;
 	skb->pkt_type = PACKET_HOST;
diff --git a/drivers/net/amt.c b/drivers/net/amt.c
index f2f3139e38a5..11b4d0ffc8a1 100644
--- a/drivers/net/amt.c
+++ b/drivers/net/amt.c
@@ -2340,7 +2340,7 @@ static bool amt_multicast_data_handler(struct amt_dev *amt, struct sk_buff *skb)
 	len = skb->len;
 	err = gro_cells_receive(&amt->gro_cells, skb);
 	if (likely(err == NET_RX_SUCCESS))
-		dev_sw_netstats_rx_add(amt->dev, len);
+		dev_sw_netstats_rx_add(amt->dev, 1, len);
 	else
 		amt->dev->stats.rx_dropped++;
 
@@ -2439,7 +2439,7 @@ static bool amt_membership_query_handler(struct amt_dev *amt,
 	local_bh_disable();
 	if (__netif_rx(skb) == NET_RX_SUCCESS) {
 		amt_update_gw_status(amt, AMT_STATUS_RECEIVED_QUERY, true);
-		dev_sw_netstats_rx_add(amt->dev, len);
+		dev_sw_netstats_rx_add(amt->dev, 1, len);
 	} else {
 		amt->dev->stats.rx_dropped++;
 	}
@@ -2541,7 +2541,7 @@ static bool amt_update_handler(struct amt_dev *amt, struct sk_buff *skb)
 	if (__netif_rx(skb) == NET_RX_SUCCESS) {
 		amt_update_relay_status(tunnel, AMT_STATUS_RECEIVED_UPDATE,
 					true);
-		dev_sw_netstats_rx_add(amt->dev, len);
+		dev_sw_netstats_rx_add(amt->dev, 1, len);
 	} else {
 		amt->dev->stats.rx_dropped++;
 	}
diff --git a/drivers/net/ethernet/hisilicon/hibmcge/hbg_txrx.c b/drivers/net/ethernet/hisilicon/hibmcge/hbg_txrx.c
index a4ea92c31c2f..bc1104b9f27d 100644
--- a/drivers/net/ethernet/hisilicon/hibmcge/hbg_txrx.c
+++ b/drivers/net/ethernet/hisilicon/hibmcge/hbg_txrx.c
@@ -516,7 +516,7 @@ static int hbg_napi_rx_poll(struct napi_struct *napi, int budget)
 		skb_put(buffer->skb, pkt_len);
 		buffer->skb->protocol = eth_type_trans(buffer->skb,
 						       priv->netdev);
-		dev_sw_netstats_rx_add(priv->netdev, pkt_len);
+		dev_sw_netstats_rx_add(priv->netdev, 1, pkt_len);
 		napi_gro_receive(napi, buffer->skb);
 		buffer->skb = NULL;
 		buffer->page = NULL;
diff --git a/drivers/net/ethernet/litex/litex_liteeth.c b/drivers/net/ethernet/litex/litex_liteeth.c
index 108d0a0db206..375a049fb3ad 100644
--- a/drivers/net/ethernet/litex/litex_liteeth.c
+++ b/drivers/net/ethernet/litex/litex_liteeth.c
@@ -78,7 +78,7 @@ static int liteeth_rx(struct net_device *netdev)
 	memcpy_fromio(data, priv->rx_base + rx_slot * priv->slot_size, len);
 	skb->protocol = eth_type_trans(skb, netdev);
 
-	dev_sw_netstats_rx_add(netdev, len);
+	dev_sw_netstats_rx_add(netdev, 1, len);
 
 	return netif_rx(skb);
 
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 791277e750ba..0cbeaa1b7d4e 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -4846,7 +4846,7 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, int budget
 
 		napi_gro_receive(&tp->napi, skb);
 
-		dev_sw_netstats_rx_add(dev, pkt_size);
+		dev_sw_netstats_rx_add(dev, 1, pkt_size);
 release_descriptor:
 		rtl8169_mark_to_asic(desc);
 	}
diff --git a/drivers/net/ethernet/realtek/rtase/rtase_main.c b/drivers/net/ethernet/realtek/rtase/rtase_main.c
index ef13109c49cf..40186d6a926a 100644
--- a/drivers/net/ethernet/realtek/rtase/rtase_main.c
+++ b/drivers/net/ethernet/realtek/rtase/rtase_main.c
@@ -568,7 +568,7 @@ static int rx_handler(struct rtase_ring *ring, int budget)
 		rtase_rx_vlan_skb(desc, skb);
 		rtase_rx_skb(ring, skb);
 
-		dev_sw_netstats_rx_add(dev, pkt_size);
+		dev_sw_netstats_rx_add(dev, 1, pkt_size);
 
 skip_process_pkt:
 		workdone++;
diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
index a38bf7f4f434..1d92c3d27946 100644
--- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
@@ -1210,13 +1210,13 @@ static int am65_cpsw_run_xdp(struct am65_cpsw_rx_flow *flow,
 		if (err)
 			goto drop;
 
-		dev_sw_netstats_rx_add(ndev, pkt_len);
+		dev_sw_netstats_rx_add(ndev, 1, pkt_len);
 		return AM65_CPSW_XDP_TX;
 	case XDP_REDIRECT:
 		if (unlikely(xdp_do_redirect(ndev, xdp, prog)))
 			goto drop;
 
-		dev_sw_netstats_rx_add(ndev, pkt_len);
+		dev_sw_netstats_rx_add(ndev, 1, pkt_len);
 		return AM65_CPSW_XDP_REDIRECT;
 	default:
 		bpf_warn_invalid_xdp_action(ndev, prog, act);
@@ -1358,7 +1358,7 @@ static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_rx_flow *flow,
 	am65_cpsw_nuss_rx_csum(skb, csum_info);
 	napi_gro_receive(&flow->napi_rx, skb);
 
-	dev_sw_netstats_rx_add(ndev, pkt_len);
+	dev_sw_netstats_rx_add(ndev, 1, pkt_len);
 
 allocate:
 	new_page = page_pool_dev_alloc_pages(flow->page_pool);
diff --git a/drivers/net/ethernet/ti/icssg/icssg_common.c b/drivers/net/ethernet/ti/icssg/icssg_common.c
index 0cf9dfe0fa36..60cac4d0a936 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_common.c
+++ b/drivers/net/ethernet/ti/icssg/icssg_common.c
@@ -811,14 +811,14 @@ static u32 emac_run_xdp(struct prueth_emac *emac, struct xdp_buff *xdp, u32 *len
 			goto drop;
 		}
 
-		dev_sw_netstats_rx_add(ndev, xdpf->len);
+		dev_sw_netstats_rx_add(ndev, 1, xdpf->len);
 		return result;
 	case XDP_REDIRECT:
 		err = xdp_do_redirect(emac->ndev, xdp, xdp_prog);
 		if (err)
 			goto drop;
 
-		dev_sw_netstats_rx_add(ndev, pkt_len);
+		dev_sw_netstats_rx_add(ndev, 1, pkt_len);
 		return ICSSG_XDP_REDIR;
 	default:
 		bpf_warn_invalid_xdp_action(emac->ndev, xdp_prog, act);
diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index e8949f556209..be1f884de218 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -335,7 +335,7 @@ static int gtp_rx(struct pdp_ctx *pctx, struct sk_buff *skb,
 
 	skb->dev = pctx->dev;
 
-	dev_sw_netstats_rx_add(pctx->dev, skb->len);
+	dev_sw_netstats_rx_add(pctx->dev, 1, skb->len);
 
 	__netif_rx(skb);
 	return 0;
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index f6cad0746a02..807939aa8c64 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -836,7 +836,7 @@ static void macsec_finalize_skb(struct sk_buff *skb, u8 icv_len, u8 hdr_len)
 
 static void count_rx(struct net_device *dev, int len)
 {
-	dev_sw_netstats_rx_add(dev, len);
+	dev_sw_netstats_rx_add(dev, 1, len);
 }
 
 static void macsec_decrypt_done(void *data, int err)
diff --git a/drivers/net/netkit.c b/drivers/net/netkit.c
index 5c0e01396e06..993ea62336a3 100644
--- a/drivers/net/netkit.c
+++ b/drivers/net/netkit.c
@@ -107,7 +107,7 @@ static netdev_tx_t netkit_xmit(struct sk_buff *skb, struct net_device *dev)
 		skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
 		if (likely(__netif_rx(skb) == NET_RX_SUCCESS)) {
 			dev_sw_netstats_tx_add(dev, 1, len);
-			dev_sw_netstats_rx_add(peer, len);
+			dev_sw_netstats_rx_add(peer, 1, len);
 		} else {
 			goto drop_stats;
 		}
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
index 6344c5eb0f98..c9f33b588fab 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
@@ -2507,7 +2507,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb)
 		break;
 	}
 
-	dev_sw_netstats_rx_add(ppp->dev, skb->len - PPP_PROTO_LEN);
+	dev_sw_netstats_rx_add(ppp->dev, 1, skb->len - PPP_PROTO_LEN);
 
 	npi = proto_to_npindex(proto);
 	if (npi < 0) {
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index c492fda6fc15..2d6547d0453d 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1567,7 +1567,7 @@ static int tun_xdp_act(struct tun_struct *tun, struct bpf_prog *xdp_prog,
 			dev_core_stats_rx_dropped_inc(tun->dev);
 			return err;
 		}
-		dev_sw_netstats_rx_add(tun->dev, xdp->data_end - xdp->data);
+		dev_sw_netstats_rx_add(tun->dev, 1, xdp->data_end - xdp->data);
 		break;
 	case XDP_TX:
 		err = tun_xdp_tx(tun->dev, xdp);
@@ -1575,7 +1575,7 @@ static int tun_xdp_act(struct tun_struct *tun, struct bpf_prog *xdp_prog,
 			dev_core_stats_rx_dropped_inc(tun->dev);
 			return err;
 		}
-		dev_sw_netstats_rx_add(tun->dev, xdp->data_end - xdp->data);
+		dev_sw_netstats_rx_add(tun->dev, 1, xdp->data_end - xdp->data);
 		break;
 	case XDP_PASS:
 		break;
@@ -1957,7 +1957,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
 	rcu_read_unlock();
 
 	preempt_disable();
-	dev_sw_netstats_rx_add(tun->dev, len);
+	dev_sw_netstats_rx_add(tun->dev, 1, len);
 	preempt_enable();
 
 	if (rxhash)
@@ -2497,7 +2497,7 @@ static int tun_xdp_one(struct tun_struct *tun,
 	/* No need to disable preemption here since this function is
 	 * always called with bh disabled
 	 */
-	dev_sw_netstats_rx_add(tun->dev, datasize);
+	dev_sw_netstats_rx_add(tun->dev, 1, datasize);
 
 	if (rxhash)
 		tun_flow_update(tun, rxhash, tfile);
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 3a4985b582cb..bf3979a048a7 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -217,7 +217,7 @@ static int qmimux_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
 			net->stats.rx_errors++;
 			return 0;
 		} else {
-			dev_sw_netstats_rx_add(net, pkt_len);
+			dev_sw_netstats_rx_add(net, 1, pkt_len);
 		}
 
 skip:
diff --git a/drivers/net/wireguard/receive.c b/drivers/net/wireguard/receive.c
index eb8851113654..61486b57b6ce 100644
--- a/drivers/net/wireguard/receive.c
+++ b/drivers/net/wireguard/receive.c
@@ -19,7 +19,7 @@
 /* Must be called with bh disabled. */
 static void update_rx_stats(struct wg_peer *peer, size_t len)
 {
-	dev_sw_netstats_rx_add(peer->device->dev, len);
+	dev_sw_netstats_rx_add(peer->device->dev, 1, len);
 	peer->rx_bytes += len;
 }
 
diff --git a/drivers/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c b/drivers/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c
index c1a53e1ba3be..01ff00f7a447 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c
@@ -756,7 +756,7 @@ static int qtnf_pcie_pearl_rx_poll(struct napi_struct *napi, int budget)
 			skb_put(skb, psize);
 			ndev = qtnf_classify_skb(bus, skb);
 			if (likely(ndev)) {
-				dev_sw_netstats_rx_add(ndev, skb->len);
+				dev_sw_netstats_rx_add(ndev, 1, skb->len);
 				skb->protocol = eth_type_trans(skb, ndev);
 				napi_gro_receive(napi, skb);
 			} else {
diff --git a/drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c b/drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c
index ef5c069542d4..81367451e096 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c
@@ -662,7 +662,7 @@ static int qtnf_topaz_rx_poll(struct napi_struct *napi, int budget)
 			skb_put(skb, psize);
 			ndev = qtnf_classify_skb(bus, skb);
 			if (likely(ndev)) {
-				dev_sw_netstats_rx_add(ndev, skb->len);
+				dev_sw_netstats_rx_add(ndev, 1, skb->len);
 				skb->protocol = eth_type_trans(skb, ndev);
 				netif_receive_skb(skb);
 			} else {
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 67e25f6d15a4..351d8c4950e5 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2992,13 +2992,15 @@ struct pcpu_lstats {
 
 void dev_lstats_read(struct net_device *dev, u64 *packets, u64 *bytes);
 
-static inline void dev_sw_netstats_rx_add(struct net_device *dev, unsigned int len)
+static inline void dev_sw_netstats_rx_add(struct net_device *dev,
+					  unsigned int packets,
+					  unsigned int len)
 {
 	struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
 
 	u64_stats_update_begin(&tstats->syncp);
 	u64_stats_add(&tstats->rx_bytes, len);
-	u64_stats_inc(&tstats->rx_packets);
+	u64_stats_add(&tstats->rx_packets, packets);
 	u64_stats_update_end(&tstats->syncp);
 }
 
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index 2cbae0f9ae1f..adfb1861a8dc 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -36,7 +36,7 @@ static int br_pass_frame_up(struct sk_buff *skb, bool promisc)
 	struct net_bridge *br = netdev_priv(brdev);
 	struct net_bridge_vlan_group *vg;
 
-	dev_sw_netstats_rx_add(brdev, skb->len);
+	dev_sw_netstats_rx_add(brdev, 1, skb->len);
 
 	vg = br_vlan_group_rcu(br);
 
diff --git a/net/core/filter.c b/net/core/filter.c
index a77d23fe2359..c3b99c19a22d 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -2526,7 +2526,7 @@ int skb_do_redirect(struct sk_buff *skb)
 			     net_eq(net, dev_net(dev))))
 			goto out_drop;
 		skb->dev = dev;
-		dev_sw_netstats_rx_add(dev, skb->len);
+		dev_sw_netstats_rx_add(dev, 1, skb->len);
 		skb_scrub_packet(skb, false);
 		return -EAGAIN;
 	}
diff --git a/net/dsa/tag.c b/net/dsa/tag.c
index 79ad105902d9..92455cb848ca 100644
--- a/net/dsa/tag.c
+++ b/net/dsa/tag.c
@@ -115,7 +115,7 @@ static int dsa_switch_rcv(struct sk_buff *skb, struct net_device *dev,
 		skb = nskb;
 	}
 
-	dev_sw_netstats_rx_add(skb->dev, skb->len + ETH_HLEN);
+	dev_sw_netstats_rx_add(skb->dev, 1, skb->len + ETH_HLEN);
 
 	if (dsa_skb_defer_rx_timestamp(p, skb))
 		return 0;
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index 50d0f5fe4e4c..88ac5e5fd68c 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -432,7 +432,7 @@ int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
 		}
 	}
 
-	dev_sw_netstats_rx_add(tunnel->dev, skb->len);
+	dev_sw_netstats_rx_add(tunnel->dev, 1, skb->len);
 	skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(tunnel->dev)));
 
 	if (tunnel->dev->type == ARPHRD_ETHER) {
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
index 95b6bb78fcd2..54a789ec201f 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -140,7 +140,7 @@ static int vti_rcv_cb(struct sk_buff *skb, int err)
 
 	skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(skb->dev)));
 	skb->dev = dev;
-	dev_sw_netstats_rx_add(dev, skb->len);
+	dev_sw_netstats_rx_add(dev, 1, skb->len);
 
 	return 0;
 }
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 4c29aa94e86e..90cb0e769a06 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -870,7 +870,7 @@ static int __ip6_tnl_rcv(struct ip6_tnl *tunnel, struct sk_buff *skb,
 		}
 	}
 
-	dev_sw_netstats_rx_add(tunnel->dev, skb->len);
+	dev_sw_netstats_rx_add(tunnel->dev, 1, skb->len);
 
 	skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(tunnel->dev)));
 
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
index ad5290be4dd6..adfe05c16c5b 100644
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -384,7 +384,7 @@ static int vti6_rcv_cb(struct sk_buff *skb, int err)
 
 	skb_scrub_packet(skb, !net_eq(t->net, dev_net(skb->dev)));
 	skb->dev = dev;
-	dev_sw_netstats_rx_add(dev, skb->len);
+	dev_sw_netstats_rx_add(dev, 1, skb->len);
 
 	return 0;
 }
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index ef2e5111fb3a..aaec43451b20 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -724,7 +724,7 @@ static int ipip6_rcv(struct sk_buff *skb)
 			}
 		}
 
-		dev_sw_netstats_rx_add(tunnel->dev, skb->len);
+		dev_sw_netstats_rx_add(tunnel->dev, 1, skb->len);
 
 		netif_rx(skb);
 
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 6c4b549444c6..424a1d393753 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -956,7 +956,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
 			continue;
 
 		skb->dev = prev_sdata->dev;
-		dev_sw_netstats_rx_add(skb->dev, skb->len);
+		dev_sw_netstats_rx_add(skb->dev, 1, skb->len);
 		netif_receive_skb(skb);
 		prev_sdata = sdata;
 	}
@@ -970,7 +970,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
 							 only_monitor);
 		if (skb) {
 			skb->dev = prev_sdata->dev;
-			dev_sw_netstats_rx_add(skb->dev, skb->len);
+			dev_sw_netstats_rx_add(skb->dev, 1, skb->len);
 			netif_receive_skb(skb);
 		}
 	}
@@ -2776,7 +2776,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
 	skb = rx->skb;
 	xmit_skb = NULL;
 
-	dev_sw_netstats_rx_add(dev, skb->len);
+	dev_sw_netstats_rx_add(dev, 1, skb->len);
 
 	if (rx->sta) {
 		/* The seqno index has the same property as needed
@@ -4878,7 +4878,7 @@ static void ieee80211_rx_8023(struct ieee80211_rx_data *rx,
 
 	skb->dev = fast_rx->dev;
 
-	dev_sw_netstats_rx_add(fast_rx->dev, skb->len);
+	dev_sw_netstats_rx_add(fast_rx->dev, 1, skb->len);
 
 	/* The seqno index has the same property as needed
 	 * for the rx_msdu field, i.e. it is IEEE80211_NUM_TIDS
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
index 125d310871e9..f1c4ed1bad33 100644
--- a/net/openvswitch/vport-internal_dev.c
+++ b/net/openvswitch/vport-internal_dev.c
@@ -199,7 +199,7 @@ static int internal_dev_recv(struct sk_buff *skb)
 	skb->pkt_type = PACKET_HOST;
 	skb->protocol = eth_type_trans(skb, netdev);
 	skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
-	dev_sw_netstats_rx_add(netdev, skb->len);
+	dev_sw_netstats_rx_add(netdev, 1, skb->len);
 
 	netif_rx(skb);
 	return NETDEV_TX_OK;
diff --git a/net/xfrm/xfrm_interface_core.c b/net/xfrm/xfrm_interface_core.c
index 330a05286a56..f700adbe26a9 100644
--- a/net/xfrm/xfrm_interface_core.c
+++ b/net/xfrm/xfrm_interface_core.c
@@ -415,7 +415,7 @@ static int xfrmi_rcv_cb(struct sk_buff *skb, int err)
 		md_dst->u.xfrm_info.link = link;
 		skb_dst_set(skb, (struct dst_entry *)md_dst);
 	}
-	dev_sw_netstats_rx_add(dev, skb->len);
+	dev_sw_netstats_rx_add(dev, 1, skb->len);
 
 	return 0;
 }
-- 
2.43.0