]> www.infradead.org Git - linux-platform-drivers-x86.git/commitdiff
net/mlx5: SF, Consider own vhca events of SF devices
authorParav Pandit <parav@nvidia.com>
Thu, 11 Mar 2021 11:51:38 +0000 (13:51 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Sat, 24 Apr 2021 07:58:59 +0000 (00:58 -0700)
Vhca events on eswitch manager are received for all the functions on the
NIC, including for SFs of external host PF controllers.

While SF device handler is only interested in SF devices events related
to its own PF.
Hence, validate if the function belongs to self or not.

Signed-off-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Vu Pham <vuhuong@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c

index 90b524c59f3c324eb49c385fe7ea98200bf308ac..6a0c6f965ad16bc995e9d519437012b583b89321 100644 (file)
@@ -148,9 +148,19 @@ mlx5_sf_dev_state_change_handler(struct notifier_block *nb, unsigned long event_
        struct mlx5_sf_dev_table *table = container_of(nb, struct mlx5_sf_dev_table, nb);
        const struct mlx5_vhca_state_event *event = data;
        struct mlx5_sf_dev *sf_dev;
+       u16 max_functions;
        u16 sf_index;
+       u16 base_id;
+
+       max_functions = mlx5_sf_max_functions(table->dev);
+       if (!max_functions)
+               return 0;
+
+       base_id = MLX5_CAP_GEN(table->dev, sf_base_id);
+       if (event->function_id < base_id || event->function_id >= (base_id + max_functions))
+               return 0;
 
-       sf_index = event->function_id - MLX5_CAP_GEN(table->dev, sf_base_id);
+       sf_index = event->function_id - base_id;
        sf_dev = xa_load(&table->devices, sf_index);
        switch (event->new_vhca_state) {
        case MLX5_VHCA_STATE_ALLOCATED: