Re: [PATCH net-next v7 5/6] net: dsa: mv88e6xxx: rmon: Use RMU for reading RMON data
From: Andrew Lunn <andrew@lunn.ch>
Date: 2022-09-09 01:50:03
quoted hunk ↗ jump to hunk
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index bbdf229c9e71..bd16afa2e1a5 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c@@ -1234,16 +1234,30 @@ static int mv88e6xxx_stats_get_stats(struct mv88e6xxx_chip *chip, int port, u16 bank1_select, u16 histogram) { struct mv88e6xxx_hw_stat *stat; + int offset = 0; + u64 high; int i, j; for (i = 0, j = 0; i < ARRAY_SIZE(mv88e6xxx_hw_stats); i++) { stat = &mv88e6xxx_hw_stats[i]; if (stat->type & types) { - mv88e6xxx_reg_lock(chip); - data[j] = _mv88e6xxx_get_ethtool_stat(chip, stat, port, - bank1_select, - histogram); - mv88e6xxx_reg_unlock(chip); + if (mv88e6xxx_rmu_available(chip) &&
I was trying to avoid code like this, by the use of the ops. In terms of code, you are actually reusing very little here. What you are re-using is the table of statistics. I would add a new function, not change this function.
+ !(stat->type & STATS_TYPE_PORT)) {
+ if (stat->type & STATS_TYPE_BANK1)
+ offset = 32;
+
+ data[j] = chip->ports[port].rmu_raw_stats[stat->reg + offset];
+ if (stat->size == 8) {
+ high = chip->ports[port].rmu_raw_stats[stat->reg + offset
+ + 1];
+ data[j] += (high << 32);
+ }
+ } else {
+ mv88e6xxx_reg_lock(chip);
+ data[j] = _mv88e6xxx_get_ethtool_stat(chip, stat, port,
+ bank1_select, histogram);
+ mv88e6xxx_reg_unlock(chip);
+ }
j++;
}quoted hunk ↗ jump to hunk
diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h index 566d18cf5170..5459037067e6 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.h +++ b/drivers/net/dsa/mv88e6xxx/chip.h@@ -266,6 +266,7 @@ struct mv88e6xxx_vlan { struct mv88e6xxx_port { struct mv88e6xxx_chip *chip; int port; + u64 rmu_raw_stats[64];
That is a lot of space you don't actually need. Once you have a clean
set of functions, you can simply pass the raw data as a parameter.
Andrew