]> git.baikalelectronics.ru Git - kernel.git/commit
net/mlx5: Remove counter from idr after removing it from list
authorVlad Buslov <vladbu@mellanox.com>
Wed, 26 Sep 2018 12:19:19 +0000 (15:19 +0300)
committerSaeed Mahameed <saeedm@mellanox.com>
Thu, 18 Oct 2018 20:13:31 +0000 (13:13 -0700)
commit41316c32e11d8f5e0141a53c493bf389e3ef4b3f
tree49db76eee5150e18d15395a57acb7077d7cc7f0c
parent09143a6d9e2b048ba07f0b3768c58706be232ae7
net/mlx5: Remove counter from idr after removing it from list

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: 7033c7013baf ("net/mlx5: Add flow counters idr")
Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/fs_counters.c