提交 8b874514 编写于 作者: R Russell King 提交者: David S. Miller

phylink: fix locking asserts

Use ASSERT_RTNL() rather than WARN_ON(!lockdep_rtnl_is_held()) which
stops working when lockdep fires, and we end up with lots of warnings.

Fixes: 9525ae83 ("phylink: add phylink infrastructure")
Signed-off-by: NRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 2794ffc4
...@@ -807,7 +807,7 @@ void phylink_disconnect_phy(struct phylink *pl) ...@@ -807,7 +807,7 @@ void phylink_disconnect_phy(struct phylink *pl)
{ {
struct phy_device *phy; struct phy_device *phy;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
phy = pl->phydev; phy = pl->phydev;
if (phy) { if (phy) {
...@@ -877,7 +877,7 @@ EXPORT_SYMBOL_GPL(phylink_mac_change); ...@@ -877,7 +877,7 @@ EXPORT_SYMBOL_GPL(phylink_mac_change);
*/ */
void phylink_start(struct phylink *pl) void phylink_start(struct phylink *pl)
{ {
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
netdev_info(pl->netdev, "configuring for %s/%s link mode\n", netdev_info(pl->netdev, "configuring for %s/%s link mode\n",
phylink_an_mode_str(pl->link_an_mode), phylink_an_mode_str(pl->link_an_mode),
...@@ -917,7 +917,7 @@ EXPORT_SYMBOL_GPL(phylink_start); ...@@ -917,7 +917,7 @@ EXPORT_SYMBOL_GPL(phylink_start);
*/ */
void phylink_stop(struct phylink *pl) void phylink_stop(struct phylink *pl)
{ {
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (pl->phydev) if (pl->phydev)
phy_stop(pl->phydev); phy_stop(pl->phydev);
...@@ -941,7 +941,7 @@ EXPORT_SYMBOL_GPL(phylink_stop); ...@@ -941,7 +941,7 @@ EXPORT_SYMBOL_GPL(phylink_stop);
*/ */
void phylink_ethtool_get_wol(struct phylink *pl, struct ethtool_wolinfo *wol) void phylink_ethtool_get_wol(struct phylink *pl, struct ethtool_wolinfo *wol)
{ {
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
wol->supported = 0; wol->supported = 0;
wol->wolopts = 0; wol->wolopts = 0;
...@@ -966,7 +966,7 @@ int phylink_ethtool_set_wol(struct phylink *pl, struct ethtool_wolinfo *wol) ...@@ -966,7 +966,7 @@ int phylink_ethtool_set_wol(struct phylink *pl, struct ethtool_wolinfo *wol)
{ {
int ret = -EOPNOTSUPP; int ret = -EOPNOTSUPP;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (pl->phydev) if (pl->phydev)
ret = phy_ethtool_set_wol(pl->phydev, wol); ret = phy_ethtool_set_wol(pl->phydev, wol);
...@@ -1011,7 +1011,7 @@ int phylink_ethtool_ksettings_get(struct phylink *pl, ...@@ -1011,7 +1011,7 @@ int phylink_ethtool_ksettings_get(struct phylink *pl,
{ {
struct phylink_link_state link_state; struct phylink_link_state link_state;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (pl->phydev) { if (pl->phydev) {
phy_ethtool_ksettings_get(pl->phydev, kset); phy_ethtool_ksettings_get(pl->phydev, kset);
...@@ -1064,7 +1064,7 @@ int phylink_ethtool_ksettings_set(struct phylink *pl, ...@@ -1064,7 +1064,7 @@ int phylink_ethtool_ksettings_set(struct phylink *pl,
struct phylink_link_state config; struct phylink_link_state config;
int ret; int ret;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (kset->base.autoneg != AUTONEG_DISABLE && if (kset->base.autoneg != AUTONEG_DISABLE &&
kset->base.autoneg != AUTONEG_ENABLE) kset->base.autoneg != AUTONEG_ENABLE)
...@@ -1165,7 +1165,7 @@ int phylink_ethtool_nway_reset(struct phylink *pl) ...@@ -1165,7 +1165,7 @@ int phylink_ethtool_nway_reset(struct phylink *pl)
{ {
int ret = 0; int ret = 0;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (pl->phydev) if (pl->phydev)
ret = phy_restart_aneg(pl->phydev); ret = phy_restart_aneg(pl->phydev);
...@@ -1183,7 +1183,7 @@ EXPORT_SYMBOL_GPL(phylink_ethtool_nway_reset); ...@@ -1183,7 +1183,7 @@ EXPORT_SYMBOL_GPL(phylink_ethtool_nway_reset);
void phylink_ethtool_get_pauseparam(struct phylink *pl, void phylink_ethtool_get_pauseparam(struct phylink *pl,
struct ethtool_pauseparam *pause) struct ethtool_pauseparam *pause)
{ {
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
pause->autoneg = !!(pl->link_config.pause & MLO_PAUSE_AN); pause->autoneg = !!(pl->link_config.pause & MLO_PAUSE_AN);
pause->rx_pause = !!(pl->link_config.pause & MLO_PAUSE_RX); pause->rx_pause = !!(pl->link_config.pause & MLO_PAUSE_RX);
...@@ -1201,7 +1201,7 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl, ...@@ -1201,7 +1201,7 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl,
{ {
struct phylink_link_state *config = &pl->link_config; struct phylink_link_state *config = &pl->link_config;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (!phylink_test(pl->supported, Pause) && if (!phylink_test(pl->supported, Pause) &&
!phylink_test(pl->supported, Asym_Pause)) !phylink_test(pl->supported, Asym_Pause))
...@@ -1287,7 +1287,7 @@ int phylink_get_eee_err(struct phylink *pl) ...@@ -1287,7 +1287,7 @@ int phylink_get_eee_err(struct phylink *pl)
{ {
int ret = 0; int ret = 0;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (pl->phydev) if (pl->phydev)
ret = phy_get_eee_err(pl->phydev); ret = phy_get_eee_err(pl->phydev);
...@@ -1305,7 +1305,7 @@ int phylink_ethtool_get_eee(struct phylink *pl, struct ethtool_eee *eee) ...@@ -1305,7 +1305,7 @@ int phylink_ethtool_get_eee(struct phylink *pl, struct ethtool_eee *eee)
{ {
int ret = -EOPNOTSUPP; int ret = -EOPNOTSUPP;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (pl->phydev) if (pl->phydev)
ret = phy_ethtool_get_eee(pl->phydev, eee); ret = phy_ethtool_get_eee(pl->phydev, eee);
...@@ -1323,7 +1323,7 @@ int phylink_ethtool_set_eee(struct phylink *pl, struct ethtool_eee *eee) ...@@ -1323,7 +1323,7 @@ int phylink_ethtool_set_eee(struct phylink *pl, struct ethtool_eee *eee)
{ {
int ret = -EOPNOTSUPP; int ret = -EOPNOTSUPP;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (pl->phydev) if (pl->phydev)
ret = phy_ethtool_set_eee(pl->phydev, eee); ret = phy_ethtool_set_eee(pl->phydev, eee);
...@@ -1513,7 +1513,7 @@ int phylink_mii_ioctl(struct phylink *pl, struct ifreq *ifr, int cmd) ...@@ -1513,7 +1513,7 @@ int phylink_mii_ioctl(struct phylink *pl, struct ifreq *ifr, int cmd)
struct mii_ioctl_data *mii = if_mii(ifr); struct mii_ioctl_data *mii = if_mii(ifr);
int ret; int ret;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
if (pl->phydev) { if (pl->phydev) {
/* PHYs only exist for MLO_AN_PHY and SGMII */ /* PHYs only exist for MLO_AN_PHY and SGMII */
...@@ -1581,7 +1581,7 @@ static int phylink_sfp_module_insert(void *upstream, ...@@ -1581,7 +1581,7 @@ static int phylink_sfp_module_insert(void *upstream,
port = sfp_parse_port(pl->sfp_bus, id, support); port = sfp_parse_port(pl->sfp_bus, id, support);
iface = sfp_parse_interface(pl->sfp_bus, id); iface = sfp_parse_interface(pl->sfp_bus, id);
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
switch (iface) { switch (iface) {
case PHY_INTERFACE_MODE_SGMII: case PHY_INTERFACE_MODE_SGMII:
...@@ -1650,7 +1650,7 @@ static void phylink_sfp_link_down(void *upstream) ...@@ -1650,7 +1650,7 @@ static void phylink_sfp_link_down(void *upstream)
{ {
struct phylink *pl = upstream; struct phylink *pl = upstream;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
set_bit(PHYLINK_DISABLE_LINK, &pl->phylink_disable_state); set_bit(PHYLINK_DISABLE_LINK, &pl->phylink_disable_state);
flush_work(&pl->resolve); flush_work(&pl->resolve);
...@@ -1662,7 +1662,7 @@ static void phylink_sfp_link_up(void *upstream) ...@@ -1662,7 +1662,7 @@ static void phylink_sfp_link_up(void *upstream)
{ {
struct phylink *pl = upstream; struct phylink *pl = upstream;
WARN_ON(!lockdep_rtnl_is_held()); ASSERT_RTNL();
clear_bit(PHYLINK_DISABLE_LINK, &pl->phylink_disable_state); clear_bit(PHYLINK_DISABLE_LINK, &pl->phylink_disable_state);
phylink_run_resolve(pl); phylink_run_resolve(pl);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册