• Vlad Buslov's avatar
    net/mlx5: Remove counter from idr after removing it from list · 2a4c4298
    Vlad Buslov authored
    Fs_counters list can temporary become unsorted when new counters are
    created/deleted concurrently. Idr is used to quickly lookup position to
    insert new counter in logarithmic time. However, if new flows are
    concurrently inserted during time window when flows with adjacent ids are
    already removed from idr but are still present in counters list,
    mlx5_fc_stats_work() observes counters list in inconsistent state, which
    results following warning:
    
    [ 1839.561955] mlx5_core 0000:81:00.0: mlx5_cmd_fc_bulk_get:587:(pid 729): Flow counter id (0x102d5) out of range (0x1c0a8..0x1c10b). Counter ignored.
    
    Move idr_remove() call to be executed synchronously with counter deletion
    from list. Extract this code to mlx5_fc_stats_remove() helper function that
    is called by workqueue job handler mlx5_fc_stats_work().
    
    Fixes: 12d6066c ("net/mlx5: Add flow counters idr")
    Signed-off-by: default avatarVlad Buslov <vladbu@mellanox.com>
    Reviewed-by: default avatarRoi Dayan <roid@mellanox.com>
    2a4c4298
fs_counters.c 10.4 KB