ethtool: init tsinfo stats if requested
authorVadim Fedorenko <vadfed@meta.com>
Thu, 30 May 2024 04:08:14 +0000 (21:08 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 1 Jun 2024 22:11:09 +0000 (15:11 -0700)
Statistic values should be set to ETHTOOL_STAT_NOT_SET even if the
device doesn't support statistics. Otherwise zeros will be returned as
if they are proper values:

host# ethtool -I -T lo
Time stamping parameters for lo:
Capabilities:
software-transmit
software-receive
software-system-clock
PTP Hardware Clock: none
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none
Statistics:
  tx_pkts: 0
  tx_lost: 0
  tx_err: 0

Fixes: 0e9c127729be ("ethtool: add interface to read Tx hardware timestamping statistics")
Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Vadim Fedorenko <vadfed@meta.com>
Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
Link: https://lore.kernel.org/r/20240530040814.1014446-1-vadfed@meta.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ethtool/tsinfo.c

index be2755c8d8fde7a2e74225aed4a276a39d72d0f1..57d496287e523797b05f85fc26dca111dd701c6a 100644 (file)
@@ -38,11 +38,11 @@ static int tsinfo_prepare_data(const struct ethnl_req_info *req_base,
        ret = ethnl_ops_begin(dev);
        if (ret < 0)
                return ret;
-       if (req_base->flags & ETHTOOL_FLAG_STATS &&
-           dev->ethtool_ops->get_ts_stats) {
+       if (req_base->flags & ETHTOOL_FLAG_STATS) {
                ethtool_stats_init((u64 *)&data->stats,
                                   sizeof(data->stats) / sizeof(u64));
-               dev->ethtool_ops->get_ts_stats(dev, &data->stats);
+               if (dev->ethtool_ops->get_ts_stats)
+                       dev->ethtool_ops->get_ts_stats(dev, &data->stats);
        }
        ret = __ethtool_get_ts_info(dev, &data->ts_info);
        ethnl_ops_complete(dev);