lkml.org 
[lkml]   [2020]   [Apr]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.6 50/79] net/mlx5e: Get the latest values from counters in switchdev mode
    Date
    From: Zhu Yanjun <yanjunz@mellanox.com>

    [ Upstream commit dcdf4ce0ff4ba206fc362e149c8ae81d6a2f849c ]

    In the switchdev mode, when running "cat
    /sys/class/net/NIC/statistics/tx_packets", the ppcnt register is
    accessed to get the latest values. But currently this command can
    not get the correct values from ppcnt.

    From firmware manual, before getting the 802_3 counters, the 802_3
    data layout should be set to the ppcnt register.

    When the command "cat /sys/class/net/NIC/statistics/tx_packets" is
    run, before updating 802_3 data layout with ppcnt register, the
    monitor counters are tested. The test result will decide the
    802_3 data layout is updated or not.

    Actually the monitor counters do not support to monitor rx/tx
    stats of 802_3 in switchdev mode. So the rx/tx counters change
    will not trigger monitor counters. So the 802_3 data layout will
    not be updated in ppcnt register. Finally this command can not get
    the latest values from ppcnt register with 802_3 data layout.

    Fixes: 5c7e8bbb0257 ("net/mlx5e: Use monitor counters for update stats")
    Signed-off-by: Zhu Yanjun <yanjunz@mellanox.com>
    Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
    index 2650739964326..d02db5aebac45 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
    @@ -3568,7 +3568,12 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)
    struct mlx5e_vport_stats *vstats = &priv->stats.vport;
    struct mlx5e_pport_stats *pstats = &priv->stats.pport;

    - if (!mlx5e_monitor_counter_supported(priv)) {
    + /* In switchdev mode, monitor counters doesn't monitor
    + * rx/tx stats of 802_3. The update stats mechanism
    + * should keep the 802_3 layout counters updated
    + */
    + if (!mlx5e_monitor_counter_supported(priv) ||
    + mlx5e_is_uplink_rep(priv)) {
    /* update HW stats in background for next time */
    mlx5e_queue_update_stats(priv);
    }
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-04-30 16:10    [W:4.648 / U:0.360 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site