mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-07 22:34:18 +08:00
net/mlx5: devcom only supports 2 ports
[ Upstream commit8a6e75e5f5
] Devcom API is intended to be used between 2 devices only add this implied assumption into the code and check when it's no true. Signed-off-by: Mark Bloch <mbloch@nvidia.com> Reviewed-by: Maor Gottlieb <maorg@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> Stable-dep-of:691c041bf2
("net/mlx5e: Fix deadlock in tc route query code") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
79ea1a12fb
commit
1c4e3cf894
@ -14,7 +14,7 @@ static LIST_HEAD(devcom_list);
|
||||
struct mlx5_devcom_component {
|
||||
struct {
|
||||
void *data;
|
||||
} device[MLX5_MAX_PORTS];
|
||||
} device[MLX5_DEVCOM_PORTS_SUPPORTED];
|
||||
|
||||
mlx5_devcom_event_handler_t handler;
|
||||
struct rw_semaphore sem;
|
||||
@ -25,7 +25,7 @@ struct mlx5_devcom_list {
|
||||
struct list_head list;
|
||||
|
||||
struct mlx5_devcom_component components[MLX5_DEVCOM_NUM_COMPONENTS];
|
||||
struct mlx5_core_dev *devs[MLX5_MAX_PORTS];
|
||||
struct mlx5_core_dev *devs[MLX5_DEVCOM_PORTS_SUPPORTED];
|
||||
};
|
||||
|
||||
struct mlx5_devcom {
|
||||
@ -74,13 +74,15 @@ struct mlx5_devcom *mlx5_devcom_register_device(struct mlx5_core_dev *dev)
|
||||
|
||||
if (!mlx5_core_is_pf(dev))
|
||||
return NULL;
|
||||
if (MLX5_CAP_GEN(dev, num_lag_ports) != MLX5_DEVCOM_PORTS_SUPPORTED)
|
||||
return NULL;
|
||||
|
||||
sguid0 = mlx5_query_nic_system_image_guid(dev);
|
||||
list_for_each_entry(iter, &devcom_list, list) {
|
||||
struct mlx5_core_dev *tmp_dev = NULL;
|
||||
|
||||
idx = -1;
|
||||
for (i = 0; i < MLX5_MAX_PORTS; i++) {
|
||||
for (i = 0; i < MLX5_DEVCOM_PORTS_SUPPORTED; i++) {
|
||||
if (iter->devs[i])
|
||||
tmp_dev = iter->devs[i];
|
||||
else
|
||||
@ -135,11 +137,11 @@ void mlx5_devcom_unregister_device(struct mlx5_devcom *devcom)
|
||||
|
||||
kfree(devcom);
|
||||
|
||||
for (i = 0; i < MLX5_MAX_PORTS; i++)
|
||||
for (i = 0; i < MLX5_DEVCOM_PORTS_SUPPORTED; i++)
|
||||
if (priv->devs[i])
|
||||
break;
|
||||
|
||||
if (i != MLX5_MAX_PORTS)
|
||||
if (i != MLX5_DEVCOM_PORTS_SUPPORTED)
|
||||
return;
|
||||
|
||||
list_del(&priv->list);
|
||||
@ -192,7 +194,7 @@ int mlx5_devcom_send_event(struct mlx5_devcom *devcom,
|
||||
|
||||
comp = &devcom->priv->components[id];
|
||||
down_write(&comp->sem);
|
||||
for (i = 0; i < MLX5_MAX_PORTS; i++)
|
||||
for (i = 0; i < MLX5_DEVCOM_PORTS_SUPPORTED; i++)
|
||||
if (i != devcom->idx && comp->device[i].data) {
|
||||
err = comp->handler(event, comp->device[i].data,
|
||||
event_data);
|
||||
@ -240,7 +242,7 @@ void *mlx5_devcom_get_peer_data(struct mlx5_devcom *devcom,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < MLX5_MAX_PORTS; i++)
|
||||
for (i = 0; i < MLX5_DEVCOM_PORTS_SUPPORTED; i++)
|
||||
if (i != devcom->idx)
|
||||
break;
|
||||
|
||||
|
@ -6,6 +6,8 @@
|
||||
|
||||
#include <linux/mlx5/driver.h>
|
||||
|
||||
#define MLX5_DEVCOM_PORTS_SUPPORTED 2
|
||||
|
||||
enum mlx5_devcom_components {
|
||||
MLX5_DEVCOM_ESW_OFFLOADS,
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user