Commit 255bf5e9 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch...

Merge branch 'net-switch-further-drivers-to-core-functionality-for-handling-per-cpu-byte-packet-counters'

Heiner Kallweit says:

====================
net: switch further drivers to core functionality for handling per-cpu byte/packet counters

Switch further drivers to core functionality for handling per-cpu
byte/packet counters. All changes are compile-tested only.
====================

Link: https://lore.kernel.org/r/5fbe3a1f-6625-eadc-b1c9-f76f78debb94@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents c9f64d1f 323955a0
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -1686,7 +1686,6 @@ static void hfi1_ipoib_ib_rcv(struct hfi1_packet *packet)
	u32 extra_bytes;
	u32 tlen, qpnum;
	bool do_work, do_cnp;
	struct hfi1_ipoib_dev_priv *priv;

	trace_hfi1_rcvhdr(packet);

@@ -1734,8 +1733,7 @@ static void hfi1_ipoib_ib_rcv(struct hfi1_packet *packet)
	if (unlikely(!skb))
		goto drop;

	priv = hfi1_ipoib_priv(netdev);
	hfi1_ipoib_update_rx_netstats(priv, 1, skb->len);
	dev_sw_netstats_rx_add(netdev, skb->len);

	skb->dev = netdev;
	skb->pkt_type = PACKET_HOST;
+0 −27
Original line number Diff line number Diff line
@@ -110,7 +110,6 @@ struct hfi1_ipoib_dev_priv {

	const struct net_device_ops *netdev_ops;
	struct rvt_qp *qp;
	struct pcpu_sw_netstats __percpu *netstats;
};

/* hfi1 ipoib rdma netdev's private data structure */
@@ -126,32 +125,6 @@ hfi1_ipoib_priv(const struct net_device *dev)
	return &((struct hfi1_ipoib_rdma_netdev *)netdev_priv(dev))->dev_priv;
}

static inline void
hfi1_ipoib_update_rx_netstats(struct hfi1_ipoib_dev_priv *priv,
			      u64 packets,
			      u64 bytes)
{
	struct pcpu_sw_netstats *netstats = this_cpu_ptr(priv->netstats);

	u64_stats_update_begin(&netstats->syncp);
	netstats->rx_packets += packets;
	netstats->rx_bytes += bytes;
	u64_stats_update_end(&netstats->syncp);
}

static inline void
hfi1_ipoib_update_tx_netstats(struct hfi1_ipoib_dev_priv *priv,
			      u64 packets,
			      u64 bytes)
{
	struct pcpu_sw_netstats *netstats = this_cpu_ptr(priv->netstats);

	u64_stats_update_begin(&netstats->syncp);
	netstats->tx_packets += packets;
	netstats->tx_bytes += bytes;
	u64_stats_update_end(&netstats->syncp);
}

int hfi1_ipoib_send_dma(struct net_device *dev,
			struct sk_buff *skb,
			struct ib_ah *address,
+3 −12
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ static int hfi1_ipoib_dev_init(struct net_device *dev)
	struct hfi1_ipoib_dev_priv *priv = hfi1_ipoib_priv(dev);
	int ret;

	priv->netstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
	dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);

	ret = priv->netdev_ops->ndo_init(dev);
	if (ret)
@@ -93,21 +93,12 @@ static int hfi1_ipoib_dev_stop(struct net_device *dev)
	return priv->netdev_ops->ndo_stop(dev);
}

static void hfi1_ipoib_dev_get_stats64(struct net_device *dev,
				       struct rtnl_link_stats64 *storage)
{
	struct hfi1_ipoib_dev_priv *priv = hfi1_ipoib_priv(dev);

	netdev_stats_to_stats64(storage, &dev->stats);
	dev_fetch_sw_netstats(storage, priv->netstats);
}

static const struct net_device_ops hfi1_ipoib_netdev_ops = {
	.ndo_init         = hfi1_ipoib_dev_init,
	.ndo_uninit       = hfi1_ipoib_dev_uninit,
	.ndo_open         = hfi1_ipoib_dev_open,
	.ndo_stop         = hfi1_ipoib_dev_stop,
	.ndo_get_stats64  = hfi1_ipoib_dev_get_stats64,
	.ndo_get_stats64  = dev_get_tstats64,
};

static int hfi1_ipoib_send(struct net_device *dev,
@@ -182,7 +173,7 @@ static void hfi1_ipoib_netdev_dtor(struct net_device *dev)
	hfi1_ipoib_txreq_deinit(priv);
	hfi1_ipoib_rxq_deinit(priv->netdev);

	free_percpu(priv->netstats);
	free_percpu(dev->tstats);
}

static void hfi1_ipoib_free_rdma_netdev(struct net_device *dev)
+1 −1
Original line number Diff line number Diff line
@@ -121,7 +121,7 @@ static void hfi1_ipoib_free_tx(struct ipoib_txreq *tx, int budget)
	struct hfi1_ipoib_dev_priv *priv = tx->priv;

	if (likely(!tx->sdma_status)) {
		hfi1_ipoib_update_tx_netstats(priv, 1, tx->skb->len);
		dev_sw_netstats_tx_add(priv->netdev, 1, tx->skb->len);
	} else {
		++priv->netdev->stats.tx_errors;
		dd_dev_warn(priv->dd,
+1 −1
Original line number Diff line number Diff line
@@ -641,7 +641,7 @@ static const struct net_device_ops aqc111_netdev_ops = {
	.ndo_stop		= usbnet_stop,
	.ndo_start_xmit		= usbnet_start_xmit,
	.ndo_tx_timeout		= usbnet_tx_timeout,
	.ndo_get_stats64	= usbnet_get_stats64,
	.ndo_get_stats64	= dev_get_tstats64,
	.ndo_change_mtu		= aqc111_change_mtu,
	.ndo_set_mac_address	= aqc111_set_mac_addr,
	.ndo_validate_addr	= eth_validate_addr,
Loading