mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
net: ethtool: strset: Allow querying phy stats by index
The ETH_SS_PHY_STATS command gets PHY statistics. Use the phydev pointer from the ethnl request to allow query phy stats from each PHY on the link. Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fcc4b105ca
commit
d078d48063
@ -233,17 +233,18 @@ static void strset_cleanup_data(struct ethnl_reply_data *reply_base)
|
||||
}
|
||||
|
||||
static int strset_prepare_set(struct strset_info *info, struct net_device *dev,
|
||||
unsigned int id, bool counts_only)
|
||||
struct phy_device *phydev, unsigned int id,
|
||||
bool counts_only)
|
||||
{
|
||||
const struct ethtool_phy_ops *phy_ops = ethtool_phy_ops;
|
||||
const struct ethtool_ops *ops = dev->ethtool_ops;
|
||||
void *strings;
|
||||
int count, ret;
|
||||
|
||||
if (id == ETH_SS_PHY_STATS && dev->phydev &&
|
||||
if (id == ETH_SS_PHY_STATS && phydev &&
|
||||
!ops->get_ethtool_phy_stats && phy_ops &&
|
||||
phy_ops->get_sset_count)
|
||||
ret = phy_ops->get_sset_count(dev->phydev);
|
||||
ret = phy_ops->get_sset_count(phydev);
|
||||
else if (ops->get_sset_count && ops->get_strings)
|
||||
ret = ops->get_sset_count(dev, id);
|
||||
else
|
||||
@ -258,10 +259,10 @@ static int strset_prepare_set(struct strset_info *info, struct net_device *dev,
|
||||
strings = kcalloc(count, ETH_GSTRING_LEN, GFP_KERNEL);
|
||||
if (!strings)
|
||||
return -ENOMEM;
|
||||
if (id == ETH_SS_PHY_STATS && dev->phydev &&
|
||||
if (id == ETH_SS_PHY_STATS && phydev &&
|
||||
!ops->get_ethtool_phy_stats && phy_ops &&
|
||||
phy_ops->get_strings)
|
||||
phy_ops->get_strings(dev->phydev, strings);
|
||||
phy_ops->get_strings(phydev, strings);
|
||||
else
|
||||
ops->get_strings(dev, id, strings);
|
||||
info->strings = strings;
|
||||
@ -305,8 +306,8 @@ static int strset_prepare_data(const struct ethnl_req_info *req_base,
|
||||
!data->sets[i].per_dev)
|
||||
continue;
|
||||
|
||||
ret = strset_prepare_set(&data->sets[i], dev, i,
|
||||
req_info->counts_only);
|
||||
ret = strset_prepare_set(&data->sets[i], dev, req_base->phydev,
|
||||
i, req_info->counts_only);
|
||||
if (ret < 0)
|
||||
goto err_ops;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user