Skip to content

Commit 64e4cf0

Browse files
author
Saeed Mahameed
committed
Merge branch 'mlx5-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux
mlx5-next shared branch with rdma subtree to avoid mlx5 rdma v.s. netdev conflicts. Highlights: 1) Lag refactroing and flow counter affinity bits. 2) mlx5 core cleanups By Roi Dayan (2) and others * 'mlx5-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux: net/mlx5: Fold the modify lag code into function net/mlx5: Add lag affinity info to log net/mlx5: Split the activate lag function into two routines net/mlx5: E-Switch, Introduce flow counter affinity IB/mlx5: Unify e-switch representors load approach between uplink and VFs net/mlx5: Use lowercase 'X' for hex values net/mlx5: Remove duplicated include from eswitch.c Signed-off-by: Saeed Mahameed <[email protected]>
2 parents 522185d + 4c283e6 commit 64e4cf0

File tree

6 files changed

+74
-51
lines changed

6 files changed

+74
-51
lines changed

drivers/infiniband/hw/mlx5/ib_rep.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,21 @@ static const struct mlx5_ib_profile rep_profile = {
4848
static int
4949
mlx5_ib_nic_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
5050
{
51+
struct mlx5_ib_dev *ibdev;
52+
53+
ibdev = mlx5_ib_rep_to_dev(rep);
54+
if (!__mlx5_ib_add(ibdev, ibdev->profile))
55+
return -EINVAL;
5156
return 0;
5257
}
5358

5459
static void
5560
mlx5_ib_nic_rep_unload(struct mlx5_eswitch_rep *rep)
5661
{
57-
rep->rep_if[REP_IB].priv = NULL;
62+
struct mlx5_ib_dev *ibdev;
63+
64+
ibdev = mlx5_ib_rep_to_dev(rep);
65+
__mlx5_ib_remove(ibdev, ibdev->profile, MLX5_IB_STAGE_MAX);
5866
}
5967

6068
static int
@@ -89,6 +97,7 @@ mlx5_ib_vport_rep_unload(struct mlx5_eswitch_rep *rep)
8997
dev = mlx5_ib_rep_to_dev(rep);
9098
__mlx5_ib_remove(dev, dev->profile, MLX5_IB_STAGE_MAX);
9199
rep->rep_if[REP_IB].priv = NULL;
100+
ib_dealloc_device(&dev->ib_dev);
92101
}
93102

94103
static void *mlx5_ib_vport_get_proto_dev(struct mlx5_eswitch_rep *rep)

drivers/infiniband/hw/mlx5/main.c

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6207,18 +6207,6 @@ static void mlx5_ib_stage_delay_drop_cleanup(struct mlx5_ib_dev *dev)
62076207
cancel_delay_drop(dev);
62086208
}
62096209

6210-
static int mlx5_ib_stage_rep_reg_init(struct mlx5_ib_dev *dev)
6211-
{
6212-
mlx5_ib_register_vport_reps(dev);
6213-
6214-
return 0;
6215-
}
6216-
6217-
static void mlx5_ib_stage_rep_reg_cleanup(struct mlx5_ib_dev *dev)
6218-
{
6219-
mlx5_ib_unregister_vport_reps(dev);
6220-
}
6221-
62226210
static int mlx5_ib_stage_dev_notifier_init(struct mlx5_ib_dev *dev)
62236211
{
62246212
dev->mdev_events.notifier_call = mlx5_ib_event;
@@ -6257,8 +6245,6 @@ void __mlx5_ib_remove(struct mlx5_ib_dev *dev,
62576245
if (profile->stage[stage].cleanup)
62586246
profile->stage[stage].cleanup(dev);
62596247
}
6260-
6261-
ib_dealloc_device((struct ib_device *)dev);
62626248
}
62636249

62646250
void *__mlx5_ib_add(struct mlx5_ib_dev *dev,
@@ -6392,9 +6378,6 @@ static const struct mlx5_ib_profile nic_rep_profile = {
63926378
STAGE_CREATE(MLX5_IB_STAGE_POST_IB_REG_UMR,
63936379
mlx5_ib_stage_post_ib_reg_umr_init,
63946380
NULL),
6395-
STAGE_CREATE(MLX5_IB_STAGE_REP_REG,
6396-
mlx5_ib_stage_rep_reg_init,
6397-
mlx5_ib_stage_rep_reg_cleanup),
63986381
};
63996382

64006383
static void *mlx5_ib_add_slave_port(struct mlx5_core_dev *mdev)
@@ -6462,8 +6445,9 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
64626445
if (MLX5_ESWITCH_MANAGER(mdev) &&
64636446
mlx5_ib_eswitch_mode(mdev->priv.eswitch) == SRIOV_OFFLOADS) {
64646447
dev->rep = mlx5_ib_vport_rep(mdev->priv.eswitch, 0);
6465-
6466-
return __mlx5_ib_add(dev, &nic_rep_profile);
6448+
dev->profile = &nic_rep_profile;
6449+
mlx5_ib_register_vport_reps(dev);
6450+
return dev;
64676451
}
64686452

64696453
return __mlx5_ib_add(dev, &pf_profile);
@@ -6485,7 +6469,12 @@ static void mlx5_ib_remove(struct mlx5_core_dev *mdev, void *context)
64856469
}
64866470

64876471
dev = context;
6488-
__mlx5_ib_remove(dev, dev->profile, MLX5_IB_STAGE_MAX);
6472+
if (dev->profile == &nic_rep_profile)
6473+
mlx5_ib_unregister_vport_reps(dev);
6474+
else
6475+
__mlx5_ib_remove(dev, dev->profile, MLX5_IB_STAGE_MAX);
6476+
6477+
ib_dealloc_device((struct ib_device *)dev);
64896478
}
64906479

64916480
static struct mlx5_interface mlx5_ib_interface = {

drivers/infiniband/hw/mlx5/mlx5_ib.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,6 @@ enum mlx5_ib_stages {
790790
MLX5_IB_STAGE_POST_IB_REG_UMR,
791791
MLX5_IB_STAGE_DELAY_DROP,
792792
MLX5_IB_STAGE_CLASS_ATTR,
793-
MLX5_IB_STAGE_REP_REG,
794793
MLX5_IB_STAGE_MAX,
795794
};
796795

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
#include "lib/eq.h"
4040
#include "eswitch.h"
4141
#include "fs_core.h"
42-
#include "lib/eq.h"
4342

4443
#define UPLINK_VPORT 0xFFFF
4544

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

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -186,22 +186,57 @@ static void mlx5_infer_tx_affinity_mapping(struct lag_tracker *tracker,
186186
*port2 = 1;
187187
}
188188

189-
static void mlx5_activate_lag(struct mlx5_lag *ldev,
190-
struct lag_tracker *tracker)
189+
static void mlx5_modify_lag(struct mlx5_lag *ldev,
190+
struct lag_tracker *tracker)
191191
{
192192
struct mlx5_core_dev *dev0 = ldev->pf[0].dev;
193+
u8 v2p_port1, v2p_port2;
193194
int err;
194195

195-
ldev->flags |= MLX5_LAG_FLAG_BONDED;
196+
mlx5_infer_tx_affinity_mapping(tracker, &v2p_port1,
197+
&v2p_port2);
198+
199+
if (v2p_port1 != ldev->v2p_map[0] ||
200+
v2p_port2 != ldev->v2p_map[1]) {
201+
ldev->v2p_map[0] = v2p_port1;
202+
ldev->v2p_map[1] = v2p_port2;
203+
204+
mlx5_core_info(dev0, "modify lag map port 1:%d port 2:%d",
205+
ldev->v2p_map[0], ldev->v2p_map[1]);
206+
207+
err = mlx5_cmd_modify_lag(dev0, v2p_port1, v2p_port2);
208+
if (err)
209+
mlx5_core_err(dev0,
210+
"Failed to modify LAG (%d)\n",
211+
err);
212+
}
213+
}
214+
215+
static int mlx5_create_lag(struct mlx5_lag *ldev,
216+
struct lag_tracker *tracker)
217+
{
218+
struct mlx5_core_dev *dev0 = ldev->pf[0].dev;
219+
int err;
196220

197221
mlx5_infer_tx_affinity_mapping(tracker, &ldev->v2p_map[0],
198222
&ldev->v2p_map[1]);
199223

224+
mlx5_core_info(dev0, "lag map port 1:%d port 2:%d",
225+
ldev->v2p_map[0], ldev->v2p_map[1]);
226+
200227
err = mlx5_cmd_create_lag(dev0, ldev->v2p_map[0], ldev->v2p_map[1]);
201228
if (err)
202229
mlx5_core_err(dev0,
203230
"Failed to create LAG (%d)\n",
204231
err);
232+
return err;
233+
}
234+
235+
static void mlx5_activate_lag(struct mlx5_lag *ldev,
236+
struct lag_tracker *tracker)
237+
{
238+
ldev->flags |= MLX5_LAG_FLAG_BONDED;
239+
mlx5_create_lag(ldev, tracker);
205240
}
206241

207242
static void mlx5_deactivate_lag(struct mlx5_lag *ldev)
@@ -223,8 +258,7 @@ static void mlx5_do_bond(struct mlx5_lag *ldev)
223258
struct mlx5_core_dev *dev0 = ldev->pf[0].dev;
224259
struct mlx5_core_dev *dev1 = ldev->pf[1].dev;
225260
struct lag_tracker tracker;
226-
u8 v2p_port1, v2p_port2;
227-
int i, err;
261+
int i;
228262
bool do_bond;
229263

230264
if (!dev0 || !dev1)
@@ -246,20 +280,7 @@ static void mlx5_do_bond(struct mlx5_lag *ldev)
246280
mlx5_add_dev_by_protocol(dev0, MLX5_INTERFACE_PROTOCOL_IB);
247281
mlx5_nic_vport_enable_roce(dev1);
248282
} else if (do_bond && mlx5_lag_is_bonded(ldev)) {
249-
mlx5_infer_tx_affinity_mapping(&tracker, &v2p_port1,
250-
&v2p_port2);
251-
252-
if ((v2p_port1 != ldev->v2p_map[0]) ||
253-
(v2p_port2 != ldev->v2p_map[1])) {
254-
ldev->v2p_map[0] = v2p_port1;
255-
ldev->v2p_map[1] = v2p_port2;
256-
257-
err = mlx5_cmd_modify_lag(dev0, v2p_port1, v2p_port2);
258-
if (err)
259-
mlx5_core_err(dev0,
260-
"Failed to modify LAG (%d)\n",
261-
err);
262-
}
283+
mlx5_modify_lag(ldev, &tracker);
263284
} else if (!do_bond && mlx5_lag_is_bonded(ldev)) {
264285
mlx5_remove_dev_by_protocol(dev0, MLX5_INTERFACE_PROTOCOL_IB);
265286
mlx5_nic_vport_disable_roce(dev1);

include/linux/mlx5/mlx5_ifc.h

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -608,13 +608,19 @@ struct mlx5_ifc_flow_table_eswitch_cap_bits {
608608
u8 reserved_at_800[0x7800];
609609
};
610610

611+
enum {
612+
MLX5_COUNTER_SOURCE_ESWITCH = 0x0,
613+
MLX5_COUNTER_FLOW_ESWITCH = 0x1,
614+
};
615+
611616
struct mlx5_ifc_e_switch_cap_bits {
612617
u8 vport_svlan_strip[0x1];
613618
u8 vport_cvlan_strip[0x1];
614619
u8 vport_svlan_insert[0x1];
615620
u8 vport_cvlan_insert_if_not_exist[0x1];
616621
u8 vport_cvlan_insert_overwrite[0x1];
617-
u8 reserved_at_5[0x18];
622+
u8 reserved_at_5[0x17];
623+
u8 counter_eswitch_affinity[0x1];
618624
u8 merged_eswitch[0x1];
619625
u8 nic_vport_node_guid_modify[0x1];
620626
u8 nic_vport_port_guid_modify[0x1];
@@ -3865,16 +3871,16 @@ enum {
38653871
};
38663872

38673873
enum mlx5_monitor_counter_ppcnt {
3868-
MLX5_QUERY_MONITOR_PPCNT_IN_RANGE_LENGTH_ERRORS = 0X0,
3869-
MLX5_QUERY_MONITOR_PPCNT_OUT_OF_RANGE_LENGTH_FIELD = 0X1,
3870-
MLX5_QUERY_MONITOR_PPCNT_FRAME_TOO_LONG_ERRORS = 0X2,
3871-
MLX5_QUERY_MONITOR_PPCNT_FRAME_CHECK_SEQUENCE_ERRORS = 0X3,
3872-
MLX5_QUERY_MONITOR_PPCNT_ALIGNMENT_ERRORS = 0X4,
3873-
MLX5_QUERY_MONITOR_PPCNT_IF_OUT_DISCARDS = 0X5,
3874+
MLX5_QUERY_MONITOR_PPCNT_IN_RANGE_LENGTH_ERRORS = 0x0,
3875+
MLX5_QUERY_MONITOR_PPCNT_OUT_OF_RANGE_LENGTH_FIELD = 0x1,
3876+
MLX5_QUERY_MONITOR_PPCNT_FRAME_TOO_LONG_ERRORS = 0x2,
3877+
MLX5_QUERY_MONITOR_PPCNT_FRAME_CHECK_SEQUENCE_ERRORS = 0x3,
3878+
MLX5_QUERY_MONITOR_PPCNT_ALIGNMENT_ERRORS = 0x4,
3879+
MLX5_QUERY_MONITOR_PPCNT_IF_OUT_DISCARDS = 0x5,
38743880
};
38753881

38763882
enum {
3877-
MLX5_QUERY_MONITOR_Q_COUNTER_RX_OUT_OF_BUFFER = 0X4,
3883+
MLX5_QUERY_MONITOR_Q_COUNTER_RX_OUT_OF_BUFFER = 0x4,
38783884
};
38793885

38803886
struct mlx5_ifc_monitor_counter_output_bits {
@@ -4780,7 +4786,7 @@ enum {
47804786
MLX5_QUERY_FLOW_GROUP_OUT_MATCH_CRITERIA_ENABLE_OUTER_HEADERS = 0x0,
47814787
MLX5_QUERY_FLOW_GROUP_OUT_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS = 0x1,
47824788
MLX5_QUERY_FLOW_GROUP_OUT_MATCH_CRITERIA_ENABLE_INNER_HEADERS = 0x2,
4783-
MLX5_QUERY_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS_2 = 0X3,
4789+
MLX5_QUERY_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS_2 = 0x3,
47844790
};
47854791

47864792
struct mlx5_ifc_query_flow_group_out_bits {

0 commit comments

Comments
 (0)