Skip to content

Commit 72041e5

Browse files
committed
Merge branch 'mlx5-fixes'
Tariq Toukan says: ==================== mlx5 fixes This patchset provides bug fixes to mlx5 core and Eth drivers. ==================== Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 68aba00 + fef9657 commit 72041e5

File tree

10 files changed

+39
-23
lines changed

10 files changed

+39
-23
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,10 @@ static int mlx5e_tx_reporter_err_cqe_recover(void *ctx)
108108
mlx5e_reset_txqsq_cc_pc(sq);
109109
sq->stats->recover++;
110110
clear_bit(MLX5E_SQ_STATE_RECOVERING, &sq->state);
111+
rtnl_lock();
111112
mlx5e_activate_txqsq(sq);
113+
rtnl_unlock();
114+
112115
if (sq->channel)
113116
mlx5e_trigger_napi_icosq(sq->channel);
114117
else
@@ -179,12 +182,16 @@ static int mlx5e_tx_reporter_ptpsq_unhealthy_recover(void *ctx)
179182
carrier_ok = netif_carrier_ok(netdev);
180183
netif_carrier_off(netdev);
181184

185+
rtnl_lock();
182186
mlx5e_deactivate_priv_channels(priv);
187+
rtnl_unlock();
183188

184189
mlx5e_ptp_close(chs->ptp);
185190
err = mlx5e_ptp_open(priv, &chs->params, chs->c[0]->lag_port, &chs->ptp);
186191

192+
rtnl_lock();
187193
mlx5e_activate_priv_channels(priv);
194+
rtnl_unlock();
188195

189196
/* return carrier back if needed */
190197
if (carrier_ok)

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

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ struct arfs_table {
4646
struct hlist_head rules_hash[ARFS_HASH_SIZE];
4747
};
4848

49+
enum {
50+
MLX5E_ARFS_STATE_ENABLED,
51+
};
52+
4953
enum arfs_type {
5054
ARFS_IPV4_TCP,
5155
ARFS_IPV6_TCP,
@@ -60,6 +64,7 @@ struct mlx5e_arfs_tables {
6064
spinlock_t arfs_lock;
6165
int last_filter_id;
6266
struct workqueue_struct *wq;
67+
unsigned long state;
6368
};
6469

6570
struct arfs_tuple {
@@ -170,6 +175,8 @@ int mlx5e_arfs_enable(struct mlx5e_flow_steering *fs)
170175
return err;
171176
}
172177
}
178+
set_bit(MLX5E_ARFS_STATE_ENABLED, &arfs->state);
179+
173180
return 0;
174181
}
175182

@@ -455,6 +462,8 @@ static void arfs_del_rules(struct mlx5e_flow_steering *fs)
455462
int i;
456463
int j;
457464

465+
clear_bit(MLX5E_ARFS_STATE_ENABLED, &arfs->state);
466+
458467
spin_lock_bh(&arfs->arfs_lock);
459468
mlx5e_for_each_arfs_rule(rule, htmp, arfs->arfs_tables, i, j) {
460469
hlist_del_init(&rule->hlist);
@@ -627,17 +636,8 @@ static void arfs_handle_work(struct work_struct *work)
627636
struct mlx5_flow_handle *rule;
628637

629638
arfs = mlx5e_fs_get_arfs(priv->fs);
630-
mutex_lock(&priv->state_lock);
631-
if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
632-
spin_lock_bh(&arfs->arfs_lock);
633-
hlist_del(&arfs_rule->hlist);
634-
spin_unlock_bh(&arfs->arfs_lock);
635-
636-
mutex_unlock(&priv->state_lock);
637-
kfree(arfs_rule);
638-
goto out;
639-
}
640-
mutex_unlock(&priv->state_lock);
639+
if (!test_bit(MLX5E_ARFS_STATE_ENABLED, &arfs->state))
640+
return;
641641

642642
if (!arfs_rule->rule) {
643643
rule = arfs_add_rule(priv, arfs_rule);
@@ -753,6 +753,11 @@ int mlx5e_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
753753
return -EPROTONOSUPPORT;
754754

755755
spin_lock_bh(&arfs->arfs_lock);
756+
if (!test_bit(MLX5E_ARFS_STATE_ENABLED, &arfs->state)) {
757+
spin_unlock_bh(&arfs->arfs_lock);
758+
return -EPERM;
759+
}
760+
756761
arfs_rule = arfs_find_rule(arfs_t, &fk);
757762
if (arfs_rule) {
758763
if (arfs_rule->rxq == rxq_index || work_busy(&arfs_rule->arfs_work)) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -589,12 +589,12 @@ static int mlx5e_get_coalesce(struct net_device *netdev,
589589
static void
590590
mlx5e_set_priv_channels_tx_coalesce(struct mlx5e_priv *priv, struct ethtool_coalesce *coal)
591591
{
592-
struct mlx5_core_dev *mdev = priv->mdev;
593592
int tc;
594593
int i;
595594

596595
for (i = 0; i < priv->channels.num; ++i) {
597596
struct mlx5e_channel *c = priv->channels.c[i];
597+
struct mlx5_core_dev *mdev = c->mdev;
598598

599599
for (tc = 0; tc < c->num_tc; tc++) {
600600
mlx5_core_modify_cq_moderation(mdev,
@@ -608,11 +608,11 @@ mlx5e_set_priv_channels_tx_coalesce(struct mlx5e_priv *priv, struct ethtool_coal
608608
static void
609609
mlx5e_set_priv_channels_rx_coalesce(struct mlx5e_priv *priv, struct ethtool_coalesce *coal)
610610
{
611-
struct mlx5_core_dev *mdev = priv->mdev;
612611
int i;
613612

614613
for (i = 0; i < priv->channels.num; ++i) {
615614
struct mlx5e_channel *c = priv->channels.c[i];
615+
struct mlx5_core_dev *mdev = c->mdev;
616616

617617
mlx5_core_modify_cq_moderation(mdev, &c->rq.cq.mcq,
618618
coal->rx_coalesce_usecs,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,8 @@ static int mlx5e_devcom_init_mpv(struct mlx5e_priv *priv, u64 *data)
209209
*data,
210210
mlx5e_devcom_event_mpv,
211211
priv);
212-
if (IS_ERR_OR_NULL(priv->devcom))
213-
return -EOPNOTSUPP;
212+
if (IS_ERR(priv->devcom))
213+
return PTR_ERR(priv->devcom);
214214

215215
if (mlx5_core_is_mp_master(priv->mdev)) {
216216
mlx5_devcom_send_event(priv->devcom, MPV_DEVCOM_MASTER_UP,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3060,7 +3060,7 @@ void mlx5_esw_offloads_devcom_init(struct mlx5_eswitch *esw, u64 key)
30603060
key,
30613061
mlx5_esw_offloads_devcom_event,
30623062
esw);
3063-
if (IS_ERR_OR_NULL(esw->devcom))
3063+
if (IS_ERR(esw->devcom))
30643064
return;
30653065

30663066
mlx5_devcom_send_event(esw->devcom,

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,8 +703,10 @@ int mlx5_deactivate_lag(struct mlx5_lag *ldev)
703703
return err;
704704
}
705705

706-
if (test_bit(MLX5_LAG_MODE_FLAG_HASH_BASED, &flags))
706+
if (test_bit(MLX5_LAG_MODE_FLAG_HASH_BASED, &flags)) {
707707
mlx5_lag_port_sel_destroy(ldev);
708+
ldev->buckets = 1;
709+
}
708710
if (mlx5_lag_has_drop_rule(ldev))
709711
mlx5_lag_drop_rule_cleanup(ldev);
710712

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ mlx5_devcom_register_component(struct mlx5_devcom_dev *devc,
220220
struct mlx5_devcom_comp *comp;
221221

222222
if (IS_ERR_OR_NULL(devc))
223-
return NULL;
223+
return ERR_PTR(-EINVAL);
224224

225225
mutex_lock(&comp_list_lock);
226226
comp = devcom_component_get(devc, id, key, handler);

drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ static int sd_register(struct mlx5_core_dev *dev)
213213
sd = mlx5_get_sd(dev);
214214
devcom = mlx5_devcom_register_component(dev->priv.devc, MLX5_DEVCOM_SD_GROUP,
215215
sd->group_id, NULL, dev);
216-
if (!devcom)
217-
return -ENOMEM;
216+
if (IS_ERR(devcom))
217+
return PTR_ERR(devcom);
218218

219219
sd->devcom = devcom;
220220

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -956,7 +956,7 @@ static void mlx5_register_hca_devcom_comp(struct mlx5_core_dev *dev)
956956
mlx5_devcom_register_component(dev->priv.devc, MLX5_DEVCOM_HCA_PORTS,
957957
mlx5_query_nic_system_image_guid(dev),
958958
NULL, dev);
959-
if (IS_ERR_OR_NULL(dev->priv.hca_devcom_comp))
959+
if (IS_ERR(dev->priv.hca_devcom_comp))
960960
mlx5_core_err(dev, "Failed to register devcom HCA component\n");
961961
}
962962

@@ -1699,12 +1699,15 @@ int mlx5_init_one_light(struct mlx5_core_dev *dev)
16991699
err = mlx5_devlink_params_register(priv_to_devlink(dev));
17001700
if (err) {
17011701
mlx5_core_warn(dev, "mlx5_devlink_param_reg err = %d\n", err);
1702-
goto query_hca_caps_err;
1702+
goto params_reg_err;
17031703
}
17041704

17051705
devl_unlock(devlink);
17061706
return 0;
17071707

1708+
params_reg_err:
1709+
devl_unregister(devlink);
1710+
devl_unlock(devlink);
17081711
query_hca_caps_err:
17091712
devl_unregister(devlink);
17101713
devl_unlock(devlink);

drivers/net/ethernet/mellanox/mlx5/core/sf/dev/driver.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ static int mlx5_sf_dev_probe(struct auxiliary_device *adev, const struct auxilia
7575
goto peer_devlink_set_err;
7676
}
7777

78-
devlink_register(devlink);
7978
return 0;
8079

8180
peer_devlink_set_err:

0 commit comments

Comments
 (0)