mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-24 00:59:22 -04:00
net: airoha: Move {cpu,fwd}_tx_packets in airoha_gdm_dev struct
Since now multiple net_devices connected to different QDMA blocks can share the same GDM port, cpu_tx_packets and fwd_tx_packets fields can be overwritten with the value from a different QDMA block. In order to fix the issue move cpu_tx_packets and fwd_tx_packets fields from airoha_gdm_port struct to airoha_gdm_dev one. Tested-by: Xuegang Lu <xuegang.lu@airoha.com> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Link: https://patch.msgid.link/20260527-airoha-eth-multi-serdes-preliminary-v1-5-ec6ed73ef7fc@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
069626af6d
commit
962c17dd28
@@ -2315,19 +2315,17 @@ static int airoha_qdma_get_tx_ets_stats(struct net_device *netdev, int channel,
|
||||
struct tc_ets_qopt_offload *opt)
|
||||
{
|
||||
struct airoha_gdm_dev *dev = netdev_priv(netdev);
|
||||
struct airoha_gdm_port *port = dev->port;
|
||||
struct airoha_qdma *qdma = dev->qdma;
|
||||
|
||||
u64 cpu_tx_packets = airoha_qdma_rr(dev->qdma,
|
||||
REG_CNTR_VAL(channel << 1));
|
||||
u64 fwd_tx_packets = airoha_qdma_rr(dev->qdma,
|
||||
u64 cpu_tx_packets = airoha_qdma_rr(qdma, REG_CNTR_VAL(channel << 1));
|
||||
u64 fwd_tx_packets = airoha_qdma_rr(qdma,
|
||||
REG_CNTR_VAL((channel << 1) + 1));
|
||||
u64 tx_packets = (cpu_tx_packets - port->cpu_tx_packets) +
|
||||
(fwd_tx_packets - port->fwd_tx_packets);
|
||||
u64 tx_packets = (cpu_tx_packets - dev->cpu_tx_packets) +
|
||||
(fwd_tx_packets - dev->fwd_tx_packets);
|
||||
|
||||
_bstats_update(opt->stats.bstats, 0, tx_packets);
|
||||
|
||||
port->cpu_tx_packets = cpu_tx_packets;
|
||||
port->fwd_tx_packets = fwd_tx_packets;
|
||||
dev->cpu_tx_packets = cpu_tx_packets;
|
||||
dev->fwd_tx_packets = fwd_tx_packets;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -544,6 +544,9 @@ struct airoha_gdm_dev {
|
||||
struct airoha_eth *eth;
|
||||
|
||||
DECLARE_BITMAP(qos_sq_bmap, AIROHA_NUM_QOS_CHANNELS);
|
||||
/* qos stats counters */
|
||||
u64 cpu_tx_packets;
|
||||
u64 fwd_tx_packets;
|
||||
};
|
||||
|
||||
struct airoha_gdm_port {
|
||||
@@ -553,10 +556,6 @@ struct airoha_gdm_port {
|
||||
|
||||
struct airoha_hw_stats stats;
|
||||
|
||||
/* qos stats counters */
|
||||
u64 cpu_tx_packets;
|
||||
u64 fwd_tx_packets;
|
||||
|
||||
struct metadata_dst *dsa_meta[AIROHA_MAX_DSA_PORTS];
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user