Commit c5714f68 authored by Russell King (Oracle)'s avatar Russell King (Oracle) Committed by Paolo Abeni

net: phylink: explicitly invalidate link_state members in mac_config

Explicitly invalidate the phylink_link_state structure members in
mac_config that do not contain reliable information for this function,
thereby preventing their future incorrect use.
Reviewed-by: default avatarDaniel Golle <daniel@makrotopia.org>
Tested-by: default avatarDaniel Golle <daniel@makrotopia.org>
Tested-by: default avatarFrank Wunderlich <frank-w@public-files.de>
Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 4d72c3bb
...@@ -1066,17 +1066,24 @@ static void phylink_pcs_poll_start(struct phylink *pl) ...@@ -1066,17 +1066,24 @@ static void phylink_pcs_poll_start(struct phylink *pl)
static void phylink_mac_config(struct phylink *pl, static void phylink_mac_config(struct phylink *pl,
const struct phylink_link_state *state) const struct phylink_link_state *state)
{ {
struct phylink_link_state st = *state;
/* Stop drivers incorrectly using these */
linkmode_zero(st.lp_advertising);
st.speed = SPEED_UNKNOWN;
st.duplex = DUPLEX_UNKNOWN;
st.an_complete = false;
st.link = false;
phylink_dbg(pl, phylink_dbg(pl,
"%s: mode=%s/%s/%s/%s/%s adv=%*pb pause=%02x link=%u\n", "%s: mode=%s/%s/%s adv=%*pb pause=%02x\n",
__func__, phylink_an_mode_str(pl->cur_link_an_mode), __func__, phylink_an_mode_str(pl->cur_link_an_mode),
phy_modes(state->interface), phy_modes(st.interface),
phy_speed_to_str(state->speed), phy_rate_matching_to_str(st.rate_matching),
phy_duplex_to_str(state->duplex), __ETHTOOL_LINK_MODE_MASK_NBITS, st.advertising,
phy_rate_matching_to_str(state->rate_matching), st.pause);
__ETHTOOL_LINK_MODE_MASK_NBITS, state->advertising,
state->pause, state->link); pl->mac_ops->mac_config(pl->config, pl->cur_link_an_mode, &st);
pl->mac_ops->mac_config(pl->config, pl->cur_link_an_mode, state);
} }
static void phylink_pcs_an_restart(struct phylink *pl) static void phylink_pcs_an_restart(struct phylink *pl)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment