mirror of https://gitee.com/openkylin/linux.git
dpaa2-eth: add software counter for Tx frames converted to S/G
With the previous commit, in case of insufficient SKB headroom on the Tx path instead of reallocing the SKB we now send a S/G frame descriptor. Export the number of occurences of this case as a per CPU counter (in debugfs) and a total number in the ethtool statistics - "tx converted sg frames'. Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d70446ee1f
commit
4c96c0ac16
|
@ -19,14 +19,14 @@ static int dpaa2_dbg_cpu_show(struct seq_file *file, void *offset)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
seq_printf(file, "Per-CPU stats for %s\n", priv->net_dev->name);
|
seq_printf(file, "Per-CPU stats for %s\n", priv->net_dev->name);
|
||||||
seq_printf(file, "%s%16s%16s%16s%16s%16s%16s%16s%16s\n",
|
seq_printf(file, "%s%16s%16s%16s%16s%16s%16s%16s%16s%16s\n",
|
||||||
"CPU", "Rx", "Rx Err", "Rx SG", "Tx", "Tx Err", "Tx conf",
|
"CPU", "Rx", "Rx Err", "Rx SG", "Tx", "Tx Err", "Tx conf",
|
||||||
"Tx SG", "Enq busy");
|
"Tx SG", "Tx converted to SG", "Enq busy");
|
||||||
|
|
||||||
for_each_online_cpu(i) {
|
for_each_online_cpu(i) {
|
||||||
stats = per_cpu_ptr(priv->percpu_stats, i);
|
stats = per_cpu_ptr(priv->percpu_stats, i);
|
||||||
extras = per_cpu_ptr(priv->percpu_extras, i);
|
extras = per_cpu_ptr(priv->percpu_extras, i);
|
||||||
seq_printf(file, "%3d%16llu%16llu%16llu%16llu%16llu%16llu%16llu%16llu\n",
|
seq_printf(file, "%3d%16llu%16llu%16llu%16llu%16llu%16llu%16llu%16llu%16llu\n",
|
||||||
i,
|
i,
|
||||||
stats->rx_packets,
|
stats->rx_packets,
|
||||||
stats->rx_errors,
|
stats->rx_errors,
|
||||||
|
@ -35,6 +35,7 @@ static int dpaa2_dbg_cpu_show(struct seq_file *file, void *offset)
|
||||||
stats->tx_errors,
|
stats->tx_errors,
|
||||||
extras->tx_conf_frames,
|
extras->tx_conf_frames,
|
||||||
extras->tx_sg_frames,
|
extras->tx_sg_frames,
|
||||||
|
extras->tx_converted_sg_frames,
|
||||||
extras->tx_portal_busy);
|
extras->tx_portal_busy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -960,6 +960,8 @@ static netdev_tx_t dpaa2_eth_tx(struct sk_buff *skb, struct net_device *net_dev)
|
||||||
err = build_sg_fd_single_buf(priv, skb, &fd);
|
err = build_sg_fd_single_buf(priv, skb, &fd);
|
||||||
percpu_extras->tx_sg_frames++;
|
percpu_extras->tx_sg_frames++;
|
||||||
percpu_extras->tx_sg_bytes += skb->len;
|
percpu_extras->tx_sg_bytes += skb->len;
|
||||||
|
percpu_extras->tx_converted_sg_frames++;
|
||||||
|
percpu_extras->tx_converted_sg_bytes += skb->len;
|
||||||
} else {
|
} else {
|
||||||
err = build_single_fd(priv, skb, &fd);
|
err = build_single_fd(priv, skb, &fd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -285,6 +285,9 @@ struct dpaa2_eth_drv_stats {
|
||||||
__u64 tx_sg_bytes;
|
__u64 tx_sg_bytes;
|
||||||
__u64 rx_sg_frames;
|
__u64 rx_sg_frames;
|
||||||
__u64 rx_sg_bytes;
|
__u64 rx_sg_bytes;
|
||||||
|
/* Linear skbs sent as a S/G FD due to insufficient headroom */
|
||||||
|
__u64 tx_converted_sg_frames;
|
||||||
|
__u64 tx_converted_sg_bytes;
|
||||||
/* Enqueues retried due to portal busy */
|
/* Enqueues retried due to portal busy */
|
||||||
__u64 tx_portal_busy;
|
__u64 tx_portal_busy;
|
||||||
};
|
};
|
||||||
|
|
|
@ -45,6 +45,8 @@ static char dpaa2_ethtool_extras[][ETH_GSTRING_LEN] = {
|
||||||
"[drv] tx sg bytes",
|
"[drv] tx sg bytes",
|
||||||
"[drv] rx sg frames",
|
"[drv] rx sg frames",
|
||||||
"[drv] rx sg bytes",
|
"[drv] rx sg bytes",
|
||||||
|
"[drv] tx converted sg frames",
|
||||||
|
"[drv] tx converted sg bytes",
|
||||||
"[drv] enqueue portal busy",
|
"[drv] enqueue portal busy",
|
||||||
/* Channel stats */
|
/* Channel stats */
|
||||||
"[drv] dequeue portal busy",
|
"[drv] dequeue portal busy",
|
||||||
|
|
Loading…
Reference in New Issue