net/mlx5: E-Switch, Honor eswitch functions changed event cap
Whenever device supports eswitch functions changed event, honor such device setting. Do not limit it to ECPF. Signed-off-by: Parav Pandit <parav@mellanox.com> Signed-off-by: Vu Pham <vuhuong@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
cd56f929e6
commit
6706a3b94f
|
@ -533,7 +533,7 @@ static u64 gather_async_events_mask(struct mlx5_core_dev *dev)
|
|||
if (MLX5_CAP_GEN(dev, max_num_of_monitor_counters))
|
||||
async_event_mask |= (1ull << MLX5_EVENT_TYPE_MONITOR_COUNTER);
|
||||
|
||||
if (mlx5_core_is_ecpf_esw_manager(dev))
|
||||
if (mlx5_eswitch_is_funcs_handler(dev))
|
||||
async_event_mask |=
|
||||
(1ull << MLX5_EVENT_TYPE_ESW_FUNCTIONS_CHANGED);
|
||||
|
||||
|
|
|
@ -406,6 +406,18 @@ static inline u16 mlx5_eswitch_manager_vport(struct mlx5_core_dev *dev)
|
|||
MLX5_VPORT_ECPF : MLX5_VPORT_PF;
|
||||
}
|
||||
|
||||
static inline bool mlx5_eswitch_is_funcs_handler(struct mlx5_core_dev *dev)
|
||||
{
|
||||
/* Ideally device should have the functions changed supported
|
||||
* capability regardless of it being ECPF or PF wherever such
|
||||
* event should be processed such as on eswitch manager device.
|
||||
* However, some ECPF based device might not have this capability
|
||||
* set. Hence OR for ECPF check to cover such device.
|
||||
*/
|
||||
return MLX5_CAP_ESW(dev, esw_functions_changed) ||
|
||||
mlx5_core_is_ecpf_esw_manager(dev);
|
||||
}
|
||||
|
||||
static inline int mlx5_eswitch_uplink_idx(struct mlx5_eswitch *esw)
|
||||
{
|
||||
/* Uplink always locate at the last element of the array.*/
|
||||
|
@ -500,6 +512,7 @@ static inline void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw) {}
|
|||
static inline int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode) { return 0; }
|
||||
static inline void mlx5_eswitch_disable_sriov(struct mlx5_eswitch *esw) {}
|
||||
static inline bool mlx5_esw_lag_prereq(struct mlx5_core_dev *dev0, struct mlx5_core_dev *dev1) { return true; }
|
||||
static inline bool mlx5_eswitch_is_funcs_handler(struct mlx5_core_dev *dev) { return false; }
|
||||
|
||||
#define FDB_MAX_CHAIN 1
|
||||
#define FDB_SLOW_PATH_CHAIN (FDB_MAX_CHAIN + 1)
|
||||
|
|
|
@ -1836,7 +1836,7 @@ static int esw_functions_changed_event(struct notifier_block *nb,
|
|||
static void esw_functions_changed_event_init(struct mlx5_eswitch *esw,
|
||||
u16 vf_nvports)
|
||||
{
|
||||
if (!mlx5_core_is_ecpf_esw_manager(esw->dev))
|
||||
if (!mlx5_eswitch_is_funcs_handler(esw->dev))
|
||||
return;
|
||||
|
||||
MLX5_NB_INIT(&esw->esw_funcs.nb, esw_functions_changed_event,
|
||||
|
@ -1847,7 +1847,7 @@ static void esw_functions_changed_event_init(struct mlx5_eswitch *esw,
|
|||
|
||||
static void esw_functions_changed_event_cleanup(struct mlx5_eswitch *esw)
|
||||
{
|
||||
if (!mlx5_core_is_ecpf_esw_manager(esw->dev))
|
||||
if (!mlx5_eswitch_is_funcs_handler(esw->dev))
|
||||
return;
|
||||
|
||||
mlx5_eq_notifier_unregister(esw->dev, &esw->esw_funcs.nb);
|
||||
|
@ -1905,7 +1905,7 @@ void esw_offloads_cleanup(struct mlx5_eswitch *esw)
|
|||
|
||||
esw_functions_changed_event_cleanup(esw);
|
||||
|
||||
if (mlx5_core_is_ecpf_esw_manager(esw->dev))
|
||||
if (mlx5_eswitch_is_funcs_handler(esw->dev))
|
||||
num_vfs = esw->esw_funcs.num_vfs;
|
||||
else
|
||||
num_vfs = esw->dev->priv.sriov.num_vfs;
|
||||
|
|
|
@ -665,7 +665,9 @@ struct mlx5_ifc_e_switch_cap_bits {
|
|||
u8 vport_svlan_insert[0x1];
|
||||
u8 vport_cvlan_insert_if_not_exist[0x1];
|
||||
u8 vport_cvlan_insert_overwrite[0x1];
|
||||
u8 reserved_at_5[0x16];
|
||||
u8 reserved_at_5[0x14];
|
||||
u8 esw_functions_changed[0x1];
|
||||
u8 reserved_at_1a[0x1];
|
||||
u8 ecpf_vport_exists[0x1];
|
||||
u8 counter_eswitch_affinity[0x1];
|
||||
u8 merged_eswitch[0x1];
|
||||
|
|
Loading…
Reference in New Issue