Skip to content

Commit a9f7705

Browse files
author
Saeed Mahameed
committed
net/mlx5: Unify vport manager capability check
Expose MLX5_VPORT_MANAGER macro to check for strict vport manager E-switch and MPFS (Multi Physical Function Switch) abilities. VPORT manager must be a PF with an ethernet link and with FW advertised vport group manager capability Replace older checks with the new macro and use it where needed in eswitch.c and mlx5e netdev eswitch related flows. The same macro will be reused in MPFS separation downstream patch. Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
1 parent 07c9f1e commit a9f7705

File tree

4 files changed

+19
-30
lines changed

4 files changed

+19
-30
lines changed

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

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2581,12 +2581,6 @@ static void mlx5e_build_channels_tx_maps(struct mlx5e_priv *priv)
25812581
}
25822582
}
25832583

2584-
static bool mlx5e_is_eswitch_vport_mngr(struct mlx5_core_dev *mdev)
2585-
{
2586-
return (MLX5_CAP_GEN(mdev, vport_group_manager) &&
2587-
MLX5_CAP_GEN(mdev, port_type) == MLX5_CAP_PORT_TYPE_ETH);
2588-
}
2589-
25902584
void mlx5e_activate_priv_channels(struct mlx5e_priv *priv)
25912585
{
25922586
int num_txqs = priv->channels.num * priv->channels.params.num_tc;
@@ -2600,7 +2594,7 @@ void mlx5e_activate_priv_channels(struct mlx5e_priv *priv)
26002594
mlx5e_activate_channels(&priv->channels);
26012595
netif_tx_start_all_queues(priv->netdev);
26022596

2603-
if (mlx5e_is_eswitch_vport_mngr(priv->mdev))
2597+
if (MLX5_VPORT_MANAGER(priv->mdev))
26042598
mlx5e_add_sqs_fwd_rules(priv);
26052599

26062600
mlx5e_wait_channels_min_rx_wqes(&priv->channels);
@@ -2611,7 +2605,7 @@ void mlx5e_deactivate_priv_channels(struct mlx5e_priv *priv)
26112605
{
26122606
mlx5e_redirect_rqts_to_drop(priv);
26132607

2614-
if (mlx5e_is_eswitch_vport_mngr(priv->mdev))
2608+
if (MLX5_VPORT_MANAGER(priv->mdev))
26152609
mlx5e_remove_sqs_fwd_rules(priv);
26162610

26172611
/* FIXME: This is a W/A only for tx timeout watch dog false alarm when
@@ -4079,7 +4073,7 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
40794073
mlx5e_set_netdev_dev_addr(netdev);
40804074

40814075
#ifdef CONFIG_NET_SWITCHDEV
4082-
if (MLX5_CAP_GEN(mdev, vport_group_manager))
4076+
if (MLX5_VPORT_MANAGER(mdev))
40834077
netdev->switchdev_ops = &mlx5e_switchdev_ops;
40844078
#endif
40854079

@@ -4221,7 +4215,7 @@ static void mlx5e_nic_enable(struct mlx5e_priv *priv)
42214215

42224216
mlx5e_enable_async_events(priv);
42234217

4224-
if (MLX5_CAP_GEN(mdev, vport_group_manager))
4218+
if (MLX5_VPORT_MANAGER(priv->mdev))
42254219
mlx5e_register_vport_reps(priv);
42264220

42274221
if (netdev->reg_state != NETREG_REGISTERED)
@@ -4255,7 +4249,7 @@ static void mlx5e_nic_disable(struct mlx5e_priv *priv)
42554249

42564250
queue_work(priv->wq, &priv->set_rx_mode_work);
42574251

4258-
if (MLX5_CAP_GEN(mdev, vport_group_manager))
4252+
if (MLX5_VPORT_MANAGER(priv->mdev))
42594253
mlx5e_unregister_vport_reps(priv);
42604254

42614255
mlx5e_disable_async_events(priv);
@@ -4437,7 +4431,7 @@ static void *mlx5e_add(struct mlx5_core_dev *mdev)
44374431
if (err)
44384432
return NULL;
44394433

4440-
if (MLX5_CAP_GEN(mdev, vport_group_manager)) {
4434+
if (MLX5_VPORT_MANAGER(mdev)) {
44414435
rpriv = mlx5e_alloc_nic_rep_priv(mdev);
44424436
if (!rpriv) {
44434437
mlx5_core_warn(mdev, "Failed to alloc NIC rep priv data\n");

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -688,9 +688,7 @@ int mlx5_start_eqs(struct mlx5_core_dev *dev)
688688
u64 async_event_mask = MLX5_ASYNC_EVENT_MASK;
689689
int err;
690690

691-
if (MLX5_CAP_GEN(dev, port_type) == MLX5_CAP_PORT_TYPE_ETH &&
692-
MLX5_CAP_GEN(dev, vport_group_manager) &&
693-
mlx5_core_is_pf(dev))
691+
if (MLX5_VPORT_MANAGER(dev))
694692
async_event_mask |= (1ull << MLX5_EVENT_TYPE_NIC_VPORT_CHANGE);
695693

696694
if (MLX5_CAP_GEN(dev, port_module_event))

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

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1611,13 +1611,14 @@ static void esw_disable_vport(struct mlx5_eswitch *esw, int vport_num)
16111611
}
16121612

16131613
/* Public E-Switch API */
1614+
#define ESW_ALLOWED(esw) ((esw) && MLX5_VPORT_MANAGER((esw)->dev))
1615+
16141616
int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)
16151617
{
16161618
int err;
16171619
int i, enabled_events;
16181620

1619-
if (!esw || !MLX5_CAP_GEN(esw->dev, vport_group_manager) ||
1620-
MLX5_CAP_GEN(esw->dev, port_type) != MLX5_CAP_PORT_TYPE_ETH)
1621+
if (!ESW_ALLOWED(esw))
16211622
return 0;
16221623

16231624
if (!MLX5_CAP_GEN(esw->dev, eswitch_flow_table) ||
@@ -1667,9 +1668,7 @@ void mlx5_eswitch_disable_sriov(struct mlx5_eswitch *esw)
16671668
int nvports;
16681669
int i;
16691670

1670-
if (!esw || !MLX5_CAP_GEN(esw->dev, vport_group_manager) ||
1671-
MLX5_CAP_GEN(esw->dev, port_type) != MLX5_CAP_PORT_TYPE_ETH ||
1672-
esw->mode == SRIOV_NONE)
1671+
if (!ESW_ALLOWED(esw) || esw->mode == SRIOV_NONE)
16731672
return;
16741673

16751674
esw_info(esw->dev, "disable SRIOV: active vports(%d) mode(%d)\n",
@@ -1698,8 +1697,7 @@ void mlx5_eswitch_disable_sriov(struct mlx5_eswitch *esw)
16981697

16991698
void mlx5_eswitch_attach(struct mlx5_eswitch *esw)
17001699
{
1701-
if (!esw || !MLX5_CAP_GEN(esw->dev, vport_group_manager) ||
1702-
MLX5_CAP_GEN(esw->dev, port_type) != MLX5_CAP_PORT_TYPE_ETH)
1700+
if (!ESW_ALLOWED(esw))
17031701
return;
17041702

17051703
esw_enable_vport(esw, 0, UC_ADDR_CHANGE);
@@ -1708,8 +1706,7 @@ void mlx5_eswitch_attach(struct mlx5_eswitch *esw)
17081706

17091707
void mlx5_eswitch_detach(struct mlx5_eswitch *esw)
17101708
{
1711-
if (!esw || !MLX5_CAP_GEN(esw->dev, vport_group_manager) ||
1712-
MLX5_CAP_GEN(esw->dev, port_type) != MLX5_CAP_PORT_TYPE_ETH)
1709+
if (!ESW_ALLOWED(esw))
17131710
return;
17141711

17151712
esw_disable_vport(esw, 0);
@@ -1723,8 +1720,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
17231720
int vport_num;
17241721
int err;
17251722

1726-
if (!MLX5_CAP_GEN(dev, vport_group_manager) ||
1727-
MLX5_CAP_GEN(dev, port_type) != MLX5_CAP_PORT_TYPE_ETH)
1723+
if (!MLX5_VPORT_MANAGER(dev))
17281724
return 0;
17291725

17301726
esw_info(dev,
@@ -1806,8 +1802,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
18061802

18071803
void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw)
18081804
{
1809-
if (!esw || !MLX5_CAP_GEN(esw->dev, vport_group_manager) ||
1810-
MLX5_CAP_GEN(esw->dev, port_type) != MLX5_CAP_PORT_TYPE_ETH)
1805+
if (!esw || !MLX5_VPORT_MANAGER(esw->dev))
18111806
return;
18121807

18131808
esw_info(esw->dev, "cleanup\n");
@@ -1838,8 +1833,6 @@ void mlx5_eswitch_vport_event(struct mlx5_eswitch *esw, struct mlx5_eqe *eqe)
18381833
}
18391834

18401835
/* Vport Administration */
1841-
#define ESW_ALLOWED(esw) \
1842-
(esw && MLX5_CAP_GEN(esw->dev, vport_group_manager) && mlx5_core_is_pf(esw->dev))
18431836
#define LEGAL_VPORT(esw, vport) (vport >= 0 && vport < esw->total_vports)
18441837

18451838
int mlx5_eswitch_set_vport_mac(struct mlx5_eswitch *esw,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
#define DRIVER_VERSION "5.0-0"
4444

4545
#define MLX5_TOTAL_VPORTS(mdev) (1 + pci_sriov_get_totalvfs(mdev->pdev))
46+
#define MLX5_VPORT_MANAGER(mdev) \
47+
(MLX5_CAP_GEN(mdev, vport_group_manager) && \
48+
(MLX5_CAP_GEN(mdev, port_type) == MLX5_CAP_PORT_TYPE_ETH) && \
49+
mlx5_core_is_pf(mdev))
4650

4751
extern uint mlx5_core_debug_mask;
4852

0 commit comments

Comments
 (0)