Skip to content

Commit 5a4cb54

Browse files
committed
Merge tag 'mlx5-fixes-2021-02-01' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux
Saeed Mahameed says: ==================== mlx5 fixes 2021-02-01 Please note the first patch in this series ("Fix function calculation for page trees") is fixing a regression due to previous fix in net which you didn't include in your previous rc pr. So I hope this series will make it into your next rc pr, so mlx5 won't be broken in the next rc. * tag 'mlx5-fixes-2021-02-01' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux: net/mlx5e: Release skb in case of failure in tc update skb net/mlx5e: Update max_opened_tc also when channels are closed net/mlx5: Fix leak upon failure of rule creation net/mlx5: Fix function calculation for page trees ==================== Link: https://lore.kernel.org/r/20210202070703.617251-1-saeed@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents f2539e1 + a34ffec commit 5a4cb54

4 files changed

Lines changed: 20 additions & 9 deletions

File tree

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3627,12 +3627,10 @@ static int mlx5e_setup_tc_mqprio(struct mlx5e_priv *priv,
36273627

36283628
err = mlx5e_safe_switch_channels(priv, &new_channels,
36293629
mlx5e_num_channels_changed_ctx, NULL);
3630-
if (err)
3631-
goto out;
36323630

3633-
priv->max_opened_tc = max_t(u8, priv->max_opened_tc,
3634-
new_channels.params.num_tc);
36353631
out:
3632+
priv->max_opened_tc = max_t(u8, priv->max_opened_tc,
3633+
priv->channels.params.num_tc);
36363634
mutex_unlock(&priv->state_lock);
36373635
return err;
36383636
}

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,8 +1262,10 @@ static void mlx5e_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe)
12621262
mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb);
12631263

12641264
if (mlx5e_cqe_regb_chain(cqe))
1265-
if (!mlx5e_tc_update_skb(cqe, skb))
1265+
if (!mlx5e_tc_update_skb(cqe, skb)) {
1266+
dev_kfree_skb_any(skb);
12661267
goto free_wqe;
1268+
}
12671269

12681270
napi_gro_receive(rq->cq.napi, skb);
12691271

@@ -1316,8 +1318,10 @@ static void mlx5e_handle_rx_cqe_rep(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe)
13161318
if (rep->vlan && skb_vlan_tag_present(skb))
13171319
skb_vlan_pop(skb);
13181320

1319-
if (!mlx5e_rep_tc_update_skb(cqe, skb, &tc_priv))
1321+
if (!mlx5e_rep_tc_update_skb(cqe, skb, &tc_priv)) {
1322+
dev_kfree_skb_any(skb);
13201323
goto free_wqe;
1324+
}
13211325

13221326
napi_gro_receive(rq->cq.napi, skb);
13231327

@@ -1371,8 +1375,10 @@ static void mlx5e_handle_rx_cqe_mpwrq_rep(struct mlx5e_rq *rq, struct mlx5_cqe64
13711375

13721376
mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb);
13731377

1374-
if (!mlx5e_rep_tc_update_skb(cqe, skb, &tc_priv))
1378+
if (!mlx5e_rep_tc_update_skb(cqe, skb, &tc_priv)) {
1379+
dev_kfree_skb_any(skb);
13751380
goto mpwrq_cqe_out;
1381+
}
13761382

13771383
napi_gro_receive(rq->cq.napi, skb);
13781384

@@ -1528,8 +1534,10 @@ static void mlx5e_handle_rx_cqe_mpwrq(struct mlx5e_rq *rq, struct mlx5_cqe64 *cq
15281534
mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb);
15291535

15301536
if (mlx5e_cqe_regb_chain(cqe))
1531-
if (!mlx5e_tc_update_skb(cqe, skb))
1537+
if (!mlx5e_tc_update_skb(cqe, skb)) {
1538+
dev_kfree_skb_any(skb);
15321539
goto mpwrq_cqe_out;
1540+
}
15331541

15341542
napi_gro_receive(rq->cq.napi, skb);
15351543

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,6 +1760,7 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft,
17601760
if (!fte_tmp)
17611761
continue;
17621762
rule = add_rule_fg(g, spec, flow_act, dest, dest_num, fte_tmp);
1763+
/* No error check needed here, because insert_fte() is not called */
17631764
up_write_ref_node(&fte_tmp->node, false);
17641765
tree_put_node(&fte_tmp->node, false);
17651766
kmem_cache_free(steering->ftes_cache, fte);
@@ -1812,6 +1813,8 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft,
18121813
up_write_ref_node(&g->node, false);
18131814
rule = add_rule_fg(g, spec, flow_act, dest, dest_num, fte);
18141815
up_write_ref_node(&fte->node, false);
1816+
if (IS_ERR(rule))
1817+
tree_put_node(&fte->node, false);
18151818
return rule;
18161819
}
18171820
rule = ERR_PTR(-ENOENT);
@@ -1910,6 +1913,8 @@ _mlx5_add_flow_rules(struct mlx5_flow_table *ft,
19101913
up_write_ref_node(&g->node, false);
19111914
rule = add_rule_fg(g, spec, flow_act, dest, dest_num, fte);
19121915
up_write_ref_node(&fte->node, false);
1916+
if (IS_ERR(rule))
1917+
tree_put_node(&fte->node, false);
19131918
tree_put_node(&g->node, false);
19141919
return rule;
19151920

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ enum {
7676

7777
static u32 get_function(u16 func_id, bool ec_function)
7878
{
79-
return func_id & (ec_function << 16);
79+
return (u32)func_id | (ec_function << 16);
8080
}
8181

8282
static struct rb_root *page_root_per_function(struct mlx5_core_dev *dev, u32 function)

0 commit comments

Comments
 (0)