Fix an issue where the network adapter could be left in down state
after changing the HW LRO sysctl when previously in up state. Reviewed by: gnn Sponsored by: Mellanox Technologies MFC after: 5 days Differential Revision: https://reviews.freebsd.org/D4941
This commit is contained in:
parent
636d1fec4d
commit
d7633a3070
@ -178,23 +178,21 @@ mlx5e_ethtool_handler(SYSCTL_HANDLER_ARGS)
|
||||
priv->params.tx_cq_moderation_mode = priv->params_ethtool.tx_coalesce_mode;
|
||||
|
||||
/* we always agree to turn off HW LRO - but not always to turn on */
|
||||
if (priv->params_ethtool.hw_lro) {
|
||||
if (priv->params_ethtool.hw_lro != 1) {
|
||||
priv->params_ethtool.hw_lro = priv->params.hw_lro_en;
|
||||
error = EINVAL;
|
||||
goto done;
|
||||
}
|
||||
if (priv->ifp->if_capenable & IFCAP_LRO)
|
||||
priv->params.hw_lro_en = !!MLX5_CAP_ETH(priv->mdev, lro_cap);
|
||||
else {
|
||||
/* set the correct (0) value to params_ethtool.hw_lro, issue a warning and return error */
|
||||
if (priv->params_ethtool.hw_lro != 0) {
|
||||
if ((priv->ifp->if_capenable & IFCAP_LRO) &&
|
||||
MLX5_CAP_ETH(priv->mdev, lro_cap)) {
|
||||
priv->params.hw_lro_en = 1;
|
||||
priv->params_ethtool.hw_lro = 1;
|
||||
} else {
|
||||
priv->params.hw_lro_en = 0;
|
||||
priv->params_ethtool.hw_lro = 0;
|
||||
error = EINVAL;
|
||||
if_printf(priv->ifp, "Can't set HW_LRO to a device with LRO turned off");
|
||||
goto done;
|
||||
|
||||
if_printf(priv->ifp, "Can't enable HW LRO: "
|
||||
"The HW or SW LRO feature is disabled");
|
||||
}
|
||||
} else {
|
||||
priv->params.hw_lro_en = false;
|
||||
priv->params.hw_lro_en = 0;
|
||||
}
|
||||
|
||||
if (&priv->params_ethtool.arg[arg2] ==
|
||||
@ -208,7 +206,6 @@ mlx5e_ethtool_handler(SYSCTL_HANDLER_ARGS)
|
||||
priv->params_ethtool.cqe_zipping = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (was_opened)
|
||||
mlx5e_open_locked(priv->ifp);
|
||||
done:
|
||||
|
Loading…
Reference in New Issue
Block a user