Skip to content

Commit 1831729

Browse files
committed
Merge branch 'mlx5-misc-fixes-2024-12-03'
Tariq Toukan says: ==================== mlx5 misc fixes 2024-12-03 This patchset provides misc bug fixes from the team to the mlx5 core and Eth drivers. ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 5f4d035 + 5085f86 commit 1831729

File tree

5 files changed

+34
-19
lines changed

5 files changed

+34
-19
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <net/nexthop.h>
66
#include <net/ip_tunnels.h>
77
#include "tc_tun_encap.h"
8+
#include "fs_core.h"
89
#include "en_tc.h"
910
#include "tc_tun.h"
1011
#include "rep/tc.h"
@@ -24,10 +25,18 @@ static int mlx5e_set_int_port_tunnel(struct mlx5e_priv *priv,
2425

2526
route_dev = dev_get_by_index(dev_net(e->out_dev), e->route_dev_ifindex);
2627

27-
if (!route_dev || !netif_is_ovs_master(route_dev) ||
28-
attr->parse_attr->filter_dev == e->out_dev)
28+
if (!route_dev || !netif_is_ovs_master(route_dev))
2929
goto out;
3030

31+
if (priv->mdev->priv.steering->mode == MLX5_FLOW_STEERING_MODE_DMFS &&
32+
mlx5e_eswitch_uplink_rep(attr->parse_attr->filter_dev) &&
33+
(attr->esw_attr->dests[out_index].flags & MLX5_ESW_DEST_ENCAP)) {
34+
mlx5_core_warn(priv->mdev,
35+
"Matching on external port with encap + fwd to table actions is not allowed for firmware steering\n");
36+
err = -EINVAL;
37+
goto out;
38+
}
39+
3140
err = mlx5e_set_fwd_to_int_port_actions(priv, attr, e->route_dev_ifindex,
3241
MLX5E_TC_INT_PORT_EGRESS,
3342
&attr->action, out_index);

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

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2680,11 +2680,11 @@ void mlx5e_trigger_napi_sched(struct napi_struct *napi)
26802680

26812681
static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix,
26822682
struct mlx5e_params *params,
2683-
struct mlx5e_channel_param *cparam,
26842683
struct xsk_buff_pool *xsk_pool,
26852684
struct mlx5e_channel **cp)
26862685
{
26872686
struct net_device *netdev = priv->netdev;
2687+
struct mlx5e_channel_param *cparam;
26882688
struct mlx5_core_dev *mdev;
26892689
struct mlx5e_xsk_param xsk;
26902690
struct mlx5e_channel *c;
@@ -2706,8 +2706,15 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix,
27062706
return err;
27072707

27082708
c = kvzalloc_node(sizeof(*c), GFP_KERNEL, cpu_to_node(cpu));
2709-
if (!c)
2710-
return -ENOMEM;
2709+
cparam = kvzalloc(sizeof(*cparam), GFP_KERNEL);
2710+
if (!c || !cparam) {
2711+
err = -ENOMEM;
2712+
goto err_free;
2713+
}
2714+
2715+
err = mlx5e_build_channel_param(mdev, params, cparam);
2716+
if (err)
2717+
goto err_free;
27112718

27122719
c->priv = priv;
27132720
c->mdev = mdev;
@@ -2741,6 +2748,7 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix,
27412748

27422749
*cp = c;
27432750

2751+
kvfree(cparam);
27442752
return 0;
27452753

27462754
err_close_queues:
@@ -2749,6 +2757,8 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix,
27492757
err_napi_del:
27502758
netif_napi_del(&c->napi);
27512759

2760+
err_free:
2761+
kvfree(cparam);
27522762
kvfree(c);
27532763

27542764
return err;
@@ -2807,28 +2817,22 @@ static void mlx5e_close_channel(struct mlx5e_channel *c)
28072817
int mlx5e_open_channels(struct mlx5e_priv *priv,
28082818
struct mlx5e_channels *chs)
28092819
{
2810-
struct mlx5e_channel_param *cparam;
28112820
int err = -ENOMEM;
28122821
int i;
28132822

28142823
chs->num = chs->params.num_channels;
28152824

28162825
chs->c = kcalloc(chs->num, sizeof(struct mlx5e_channel *), GFP_KERNEL);
2817-
cparam = kvzalloc(sizeof(struct mlx5e_channel_param), GFP_KERNEL);
2818-
if (!chs->c || !cparam)
2819-
goto err_free;
2820-
2821-
err = mlx5e_build_channel_param(priv->mdev, &chs->params, cparam);
2822-
if (err)
2823-
goto err_free;
2826+
if (!chs->c)
2827+
goto err_out;
28242828

28252829
for (i = 0; i < chs->num; i++) {
28262830
struct xsk_buff_pool *xsk_pool = NULL;
28272831

28282832
if (chs->params.xdp_prog)
28292833
xsk_pool = mlx5e_xsk_get_pool(&chs->params, chs->params.xsk, i);
28302834

2831-
err = mlx5e_open_channel(priv, i, &chs->params, cparam, xsk_pool, &chs->c[i]);
2835+
err = mlx5e_open_channel(priv, i, &chs->params, xsk_pool, &chs->c[i]);
28322836
if (err)
28332837
goto err_close_channels;
28342838
}
@@ -2846,7 +2850,6 @@ int mlx5e_open_channels(struct mlx5e_priv *priv,
28462850
}
28472851

28482852
mlx5e_health_channels_update(priv);
2849-
kvfree(cparam);
28502853
return 0;
28512854

28522855
err_close_ptp:
@@ -2857,9 +2860,8 @@ int mlx5e_open_channels(struct mlx5e_priv *priv,
28572860
for (i--; i >= 0; i--)
28582861
mlx5e_close_channel(chs->c[i]);
28592862

2860-
err_free:
28612863
kfree(chs->c);
2862-
kvfree(cparam);
2864+
err_out:
28632865
chs->num = 0;
28642866
return err;
28652867
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2335,9 +2335,10 @@ static int esw_create_restore_table(struct mlx5_eswitch *esw)
23352335
static void esw_mode_change(struct mlx5_eswitch *esw, u16 mode)
23362336
{
23372337
mlx5_devcom_comp_lock(esw->dev->priv.hca_devcom_comp);
2338-
2339-
if (esw->dev->priv.flags & MLX5_PRIV_FLAGS_DISABLE_IB_ADEV) {
2338+
if (esw->dev->priv.flags & MLX5_PRIV_FLAGS_DISABLE_IB_ADEV ||
2339+
mlx5_core_mp_enabled(esw->dev)) {
23402340
esw->mode = mode;
2341+
mlx5_rescan_drivers_locked(esw->dev);
23412342
mlx5_devcom_comp_unlock(esw->dev->priv.hca_devcom_comp);
23422343
return;
23432344
}

drivers/net/ethernet/mellanox/mlx5/core/steering/hws/bwc_complex.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ bool mlx5hws_bwc_match_params_is_complex(struct mlx5hws_context *ctx,
3939
} else {
4040
mlx5hws_err(ctx, "Failed to calculate matcher definer layout\n");
4141
}
42+
} else {
43+
kfree(mt->fc);
4244
}
4345

4446
mlx5hws_match_template_destroy(mt);

drivers/net/ethernet/mellanox/mlx5/core/steering/hws/send.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -990,6 +990,7 @@ static int hws_bwc_send_queues_init(struct mlx5hws_context *ctx)
990990
for (i = 0; i < bwc_queues; i++) {
991991
mutex_init(&ctx->bwc_send_queue_locks[i]);
992992
lockdep_register_key(ctx->bwc_lock_class_keys + i);
993+
lockdep_set_class(ctx->bwc_send_queue_locks + i, ctx->bwc_lock_class_keys + i);
993994
}
994995

995996
return 0;

0 commit comments

Comments
 (0)