net: dsa: fix error code getting shifted with 4 in dsa_slave_get_sset_count
BugLink: https://bugs.launchpad.net/bugs/1931166 [ Upstream commitb94cbc909f
] DSA implements a bunch of 'standardized' ethtool statistics counters, namely tx_packets, tx_bytes, rx_packets, rx_bytes. So whatever the hardware driver returns in .get_sset_count(), we need to add 4 to that. That is ok, except that .get_sset_count() can return a negative error code, for example: b53_get_sset_count -> phy_ethtool_get_sset_count -> return -EIO -EIO is -5, and with 4 added to it, it becomes -1, aka -EPERM. One can imagine that certain error codes may even become positive, although based on code inspection I did not see instances of that. Check the error code first, if it is negative return it as-is. Based on a similar patch for dsa_master_get_strings from Dan Carpenter: https://patchwork.kernel.org/project/netdevbpf/patch/YJaSe3RPgn7gKxZv@mwanda/ Fixes:91da11f870
("net: Distributed Switch Architecture protocol support") Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Kamal Mostafa <kamal@canonical.com> Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
This commit is contained in:
parent
6695ea4997
commit
2b3848872c
|
@ -692,13 +692,15 @@ static int dsa_slave_get_sset_count(struct net_device *dev, int sset)
|
|||
struct dsa_switch *ds = dp->ds;
|
||||
|
||||
if (sset == ETH_SS_STATS) {
|
||||
int count;
|
||||
int count = 0;
|
||||
|
||||
count = 4;
|
||||
if (ds->ops->get_sset_count)
|
||||
count += ds->ops->get_sset_count(ds, dp->index, sset);
|
||||
if (ds->ops->get_sset_count) {
|
||||
count = ds->ops->get_sset_count(ds, dp->index, sset);
|
||||
if (count < 0)
|
||||
return count;
|
||||
}
|
||||
|
||||
return count;
|
||||
return count + 4;
|
||||
}
|
||||
|
||||
return -EOPNOTSUPP;
|
||||
|
|
Loading…
Reference in New Issue