{
struct mii_bus *bus = priv->mii_bus;
u16 lo, hi;
+ lockdep_assert_held(&priv->reg_mutex);
lo = bus->read(bus, phy_id, regnum);
hi = bus->read(bus, phy_id, regnum + 1);
{
struct mii_bus *bus = priv->mii_bus;
u16 lo, hi;
+ lockdep_assert_held(&priv->reg_mutex);
lo = val & 0xffff;
hi = (u16) (val >> 16);
memset(link, '\0', sizeof(*link));
+ mutex_lock(&priv->reg_mutex);
status = priv->chip->read_port_status(priv, port);
+ mutex_unlock(&priv->reg_mutex);
+ cond_resched();
link->aneg = !!(status & AR8216_PORT_STATUS_LINK_AUTO);
if (link->aneg) {
link->tx_flow = !!(status & AR8216_PORT_STATUS_TXFLOW);
link->rx_flow = !!(status & AR8216_PORT_STATUS_RXFLOW);
- if (link->aneg && link->duplex && priv->chip->read_port_eee_status)
+ if (link->aneg && link->duplex && priv->chip->read_port_eee_status) {
+ mutex_lock(&priv->reg_mutex);
link->eee = priv->chip->read_port_eee_status(priv, port);
+ mutex_unlock(&priv->reg_mutex);
+ }
speed = (status & AR8216_PORT_STATUS_SPEED) >>
AR8216_PORT_STATUS_SPEED_S;