Skip to content

Commit bf11485

Browse files
PatrisiousHaddadrleon
authored andcommitted
net/mlx5: Register mlx5e priv to devcom in MPV mode
If the device is in MPV mode, the ethernet driver would now register to events from IB driver about core devices affiliation or de-affiliation. Use the key provided in said event to connect each mlx5e priv instance to it's master counterpart, this way the ethernet driver is now aware of who is his master core device and even more, such as knowing if partner device has IPsec configured or not. Signed-off-by: Patrisious Haddad <phaddad@nvidia.com> Reviewed-by: Mark Bloch <mbloch@nvidia.com> Link: https://lore.kernel.org/r/279adfa0aa3a1957a339086f2c1739a50b8e4b68.1695296682.git.leon@kernel.org Signed-off-by: Leon Romanovsky <leon@kernel.org>
1 parent 0d29371 commit bf11485

4 files changed

Lines changed: 43 additions & 0 deletions

File tree

drivers/net/ethernet/mellanox/mlx5/core/en.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -936,6 +936,7 @@ struct mlx5e_priv {
936936
struct mlx5e_htb *htb;
937937
struct mlx5e_mqprio_rl *mqprio_rl;
938938
struct dentry *dfs_root;
939+
struct mlx5_devcom_comp_dev *devcom;
939940
};
940941

941942
struct mlx5e_dev {

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
#define MLX5E_IPSEC_SADB_RX_BITS 10
4343
#define MLX5E_IPSEC_ESN_SCOPE_MID 0x80000000L
4444

45+
#define MPV_DEVCOM_MASTER_UP 1
46+
4547
struct aes_gcm_keymat {
4648
u64 seq_iv;
4749

drivers/net/ethernet/mellanox/mlx5/core/en_main.c

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
#include "en/htb.h"
7070
#include "qos.h"
7171
#include "en/trap.h"
72+
#include "lib/devcom.h"
7273

7374
bool mlx5e_check_fragmented_striding_rq_cap(struct mlx5_core_dev *mdev, u8 page_shift,
7475
enum mlx5e_mpwrq_umr_mode umr_mode)
@@ -178,6 +179,37 @@ static void mlx5e_disable_async_events(struct mlx5e_priv *priv)
178179
mlx5_notifier_unregister(priv->mdev, &priv->events_nb);
179180
}
180181

182+
static int mlx5e_devcom_event_mpv(int event, void *my_data, void *event_data)
183+
{
184+
struct mlx5e_priv *slave_priv = my_data;
185+
186+
mlx5_devcom_comp_set_ready(slave_priv->devcom, true);
187+
188+
return 0;
189+
}
190+
191+
static int mlx5e_devcom_init_mpv(struct mlx5e_priv *priv, u64 *data)
192+
{
193+
priv->devcom = mlx5_devcom_register_component(priv->mdev->priv.devc,
194+
MLX5_DEVCOM_MPV,
195+
*data,
196+
mlx5e_devcom_event_mpv,
197+
priv);
198+
if (IS_ERR_OR_NULL(priv->devcom))
199+
return -EOPNOTSUPP;
200+
201+
if (mlx5_core_is_mp_master(priv->mdev))
202+
mlx5_devcom_send_event(priv->devcom, MPV_DEVCOM_MASTER_UP,
203+
MPV_DEVCOM_MASTER_UP, priv);
204+
205+
return 0;
206+
}
207+
208+
static void mlx5e_devcom_cleanup_mpv(struct mlx5e_priv *priv)
209+
{
210+
mlx5_devcom_unregister_component(priv->devcom);
211+
}
212+
181213
static int blocking_event(struct notifier_block *nb, unsigned long event, void *data)
182214
{
183215
struct mlx5e_priv *priv = container_of(nb, struct mlx5e_priv, blocking_events_nb);
@@ -192,6 +224,13 @@ static int blocking_event(struct notifier_block *nb, unsigned long event, void *
192224
return NOTIFY_BAD;
193225
}
194226
break;
227+
case MLX5_DRIVER_EVENT_AFFILIATION_DONE:
228+
if (mlx5e_devcom_init_mpv(priv, data))
229+
return NOTIFY_BAD;
230+
break;
231+
case MLX5_DRIVER_EVENT_AFFILIATION_REMOVED:
232+
mlx5e_devcom_cleanup_mpv(priv);
233+
break;
195234
default:
196235
return NOTIFY_DONE;
197236
}

drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
enum mlx5_devcom_component {
1010
MLX5_DEVCOM_ESW_OFFLOADS,
11+
MLX5_DEVCOM_MPV,
1112
MLX5_DEVCOM_NUM_COMPONENTS,
1213
};
1314

0 commit comments

Comments
 (0)