mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 16:41:39 +00:00
mlx5-fixes-2023-03-21
-----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEGhZs6bAKwk/OTgTpSD+KveBX+j4FAmQaHFgACgkQSD+KveBX +j7mSwf8CSKcuarfUUVpkuS6/uoJ2W66ga5EplxqBeWu5/rFCDfU/aOe7LI8emH0 ESzsRYSmpSw+VvlWFmQw+OGKE+XY5r9fzdDvBVMyS//CITXhab7icOm9tPlczER6 i8T30vuV618pUEXjguo19Duv+uUy0Kfg62pmcaZOE1JoSzfNYQ+vL+PbZHkh15eB d1I0VIzVL0VPfRfqAIFhnF5JA77ofOlyleqy+Dm1K87MK+jva5VO3Fiwitrd25dw aluPi+1Ew50pWlnCOAWAFmrks1gAgxDjBhbozAMTvDrDn+7RekpjRfHQ197hTpWT GUp1w6Qcc91CdCEPCk2mO+gtwnb9Qg== =E7T7 -----END PGP SIGNATURE----- Merge tag 'mlx5-fixes-2023-03-21' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux Saeed Mahameed says: ==================== mlx5 fixes 2023-03-21 This series provides bug fixes to mlx5 driver. * tag 'mlx5-fixes-2023-03-21' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux: net/mlx5: E-Switch, Fix an Oops in error handling code net/mlx5: Read the TC mapping of all priorities on ETS query net/mlx5e: Overcome slow response for first macsec ASO WQE net/mlx5e: Initialize link speed to zero net/mlx5: Fix steering rules cleanup net/mlx5e: Block entering switchdev mode with ns inconsistency net/mlx5e: Set uplink rep as NETNS_LOCAL ==================== Link: https://lore.kernel.org/r/20230321211135.47711-1-saeed@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
fb63d217e6
@ -1412,6 +1412,7 @@ static int macsec_aso_query(struct mlx5_core_dev *mdev, struct mlx5e_macsec *mac
|
|||||||
struct mlx5e_macsec_aso *aso;
|
struct mlx5e_macsec_aso *aso;
|
||||||
struct mlx5_aso_wqe *aso_wqe;
|
struct mlx5_aso_wqe *aso_wqe;
|
||||||
struct mlx5_aso *maso;
|
struct mlx5_aso *maso;
|
||||||
|
unsigned long expires;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
aso = &macsec->aso;
|
aso = &macsec->aso;
|
||||||
@ -1425,7 +1426,13 @@ static int macsec_aso_query(struct mlx5_core_dev *mdev, struct mlx5e_macsec *mac
|
|||||||
macsec_aso_build_wqe_ctrl_seg(aso, &aso_wqe->aso_ctrl, NULL);
|
macsec_aso_build_wqe_ctrl_seg(aso, &aso_wqe->aso_ctrl, NULL);
|
||||||
|
|
||||||
mlx5_aso_post_wqe(maso, false, &aso_wqe->ctrl);
|
mlx5_aso_post_wqe(maso, false, &aso_wqe->ctrl);
|
||||||
err = mlx5_aso_poll_cq(maso, false);
|
expires = jiffies + msecs_to_jiffies(10);
|
||||||
|
do {
|
||||||
|
err = mlx5_aso_poll_cq(maso, false);
|
||||||
|
if (err)
|
||||||
|
usleep_range(2, 10);
|
||||||
|
} while (err && time_is_after_jiffies(expires));
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
|
|
||||||
|
@ -117,12 +117,14 @@ static int mlx5e_dcbnl_ieee_getets(struct net_device *netdev,
|
|||||||
if (!MLX5_CAP_GEN(priv->mdev, ets))
|
if (!MLX5_CAP_GEN(priv->mdev, ets))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
ets->ets_cap = mlx5_max_tc(priv->mdev) + 1;
|
for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) {
|
||||||
for (i = 0; i < ets->ets_cap; i++) {
|
|
||||||
err = mlx5_query_port_prio_tc(mdev, i, &ets->prio_tc[i]);
|
err = mlx5_query_port_prio_tc(mdev, i, &ets->prio_tc[i]);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
ets->ets_cap = mlx5_max_tc(priv->mdev) + 1;
|
||||||
|
for (i = 0; i < ets->ets_cap; i++) {
|
||||||
err = mlx5_query_port_tc_group(mdev, i, &tc_group[i]);
|
err = mlx5_query_port_tc_group(mdev, i, &tc_group[i]);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
@ -4150,8 +4150,12 @@ static netdev_features_t mlx5e_fix_features(struct net_device *netdev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mlx5e_is_uplink_rep(priv))
|
if (mlx5e_is_uplink_rep(priv)) {
|
||||||
features = mlx5e_fix_uplink_rep_features(netdev, features);
|
features = mlx5e_fix_uplink_rep_features(netdev, features);
|
||||||
|
features |= NETIF_F_NETNS_LOCAL;
|
||||||
|
} else {
|
||||||
|
features &= ~NETIF_F_NETNS_LOCAL;
|
||||||
|
}
|
||||||
|
|
||||||
mutex_unlock(&priv->state_lock);
|
mutex_unlock(&priv->state_lock);
|
||||||
|
|
||||||
|
@ -1103,8 +1103,8 @@ static void
|
|||||||
mlx5e_hairpin_params_init(struct mlx5e_hairpin_params *hairpin_params,
|
mlx5e_hairpin_params_init(struct mlx5e_hairpin_params *hairpin_params,
|
||||||
struct mlx5_core_dev *mdev)
|
struct mlx5_core_dev *mdev)
|
||||||
{
|
{
|
||||||
|
u32 link_speed = 0;
|
||||||
u64 link_speed64;
|
u64 link_speed64;
|
||||||
u32 link_speed;
|
|
||||||
|
|
||||||
hairpin_params->mdev = mdev;
|
hairpin_params->mdev = mdev;
|
||||||
/* set hairpin pair per each 50Gbs share of the link */
|
/* set hairpin pair per each 50Gbs share of the link */
|
||||||
|
@ -364,8 +364,7 @@ int mlx5_esw_acl_ingress_vport_metadata_update(struct mlx5_eswitch *esw, u16 vpo
|
|||||||
|
|
||||||
if (WARN_ON_ONCE(IS_ERR(vport))) {
|
if (WARN_ON_ONCE(IS_ERR(vport))) {
|
||||||
esw_warn(esw->dev, "vport(%d) invalid!\n", vport_num);
|
esw_warn(esw->dev, "vport(%d) invalid!\n", vport_num);
|
||||||
err = PTR_ERR(vport);
|
return PTR_ERR(vport);
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
esw_acl_ingress_ofld_rules_destroy(esw, vport);
|
esw_acl_ingress_ofld_rules_destroy(esw, vport);
|
||||||
|
@ -959,6 +959,7 @@ void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, u16 vport_num)
|
|||||||
*/
|
*/
|
||||||
esw_vport_change_handle_locked(vport);
|
esw_vport_change_handle_locked(vport);
|
||||||
vport->enabled_events = 0;
|
vport->enabled_events = 0;
|
||||||
|
esw_apply_vport_rx_mode(esw, vport, false, false);
|
||||||
esw_vport_cleanup(esw, vport);
|
esw_vport_cleanup(esw, vport);
|
||||||
esw->enabled_vports--;
|
esw->enabled_vports--;
|
||||||
|
|
||||||
|
@ -3405,6 +3405,18 @@ static int esw_inline_mode_to_devlink(u8 mlx5_mode, u8 *mode)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool esw_offloads_devlink_ns_eq_netdev_ns(struct devlink *devlink)
|
||||||
|
{
|
||||||
|
struct net *devl_net, *netdev_net;
|
||||||
|
struct mlx5_eswitch *esw;
|
||||||
|
|
||||||
|
esw = mlx5_devlink_eswitch_get(devlink);
|
||||||
|
netdev_net = dev_net(esw->dev->mlx5e_res.uplink_netdev);
|
||||||
|
devl_net = devlink_net(devlink);
|
||||||
|
|
||||||
|
return net_eq(devl_net, netdev_net);
|
||||||
|
}
|
||||||
|
|
||||||
int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode,
|
int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode,
|
||||||
struct netlink_ext_ack *extack)
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
@ -3419,6 +3431,13 @@ int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode,
|
|||||||
if (esw_mode_from_devlink(mode, &mlx5_mode))
|
if (esw_mode_from_devlink(mode, &mlx5_mode))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (mode == DEVLINK_ESWITCH_MODE_SWITCHDEV &&
|
||||||
|
!esw_offloads_devlink_ns_eq_netdev_ns(devlink)) {
|
||||||
|
NL_SET_ERR_MSG_MOD(extack,
|
||||||
|
"Can't change E-Switch mode to switchdev when netdev net namespace has diverged from the devlink's.");
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
|
|
||||||
mlx5_lag_disable_change(esw->dev);
|
mlx5_lag_disable_change(esw->dev);
|
||||||
err = mlx5_esw_try_lock(esw);
|
err = mlx5_esw_try_lock(esw);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user