mirror of https://gitee.com/openkylin/linux.git
stmmac: remove spin_lock in stmmac_ioctl.
This patch removes un-needed spin_lock in stmmac_ioctl while reading and writing mdio registers. While holding spin_lock the code must be atomic, which is not true in this case as both mdiobus_read and writes have mutex locks. Without this patch reading mdio registers via mii-tool results in below BUG: mii-tool -vvv eth0" Using SIOCGMIIPHY=0x8947 BUG: sleeping function called from invalid context at kernel/mutex.c:287 in_atomic(): 1, irqs_disabled(): 0, pid: 614, name: mii-tool 2 locks held by mii-tool/614: #0: (rtnl_mutex){......}, at: [<c01fd80c>] dev_ioctl+0x550/0x674 #1: (&priv->lock){......}, at: [<c01b34ec>] stmmac_ioctl+0x4c/0x78 [<c002ea14>] (unwind_backtrace+0x0/0xcc) from [<c0272c38>] (mutex_lock_nested+0x24/0x35c) [<c0272c38>] (mutex_lock_nested+0x24/0x35c) from [<c01b237c>] (mdiobus_read+0x44/0x70) [<c01b237c>] (mdiobus_read+0x44/0x70) from [<c01b0c64>] (phy_mii_ioctl+0x4c/0x138) [<c01b0c64>] (phy_mii_ioctl+0x4c/0x138) from [<c01b34fc>] (stmmac_ioctl+0x5c/0x78) [<c01b34fc>] (stmmac_ioctl+0x5c/0x78) from [<c01fcec8>] (dev_ifsioc+0x2a4/0x2c8) [<c01fcec8>] (dev_ifsioc+0x2a4/0x2c8) from [<c01fd81c>] (dev_ioctl+0x560/0x674) [<c01fd81c>] (dev_ioctl+0x560/0x674) from [<c00c36e0>] (vfs_ioctl+0x2c/0x8c) [<c00c36e0>] (vfs_ioctl+0x2c/0x8c) from [<c00c4130>] (do_vfs_ioctl+0x530/0x578) [<c00c4130>] (do_vfs_ioctl+0x530/0x578) from [<c00c41ac>] (sys_ioctl+0x34/0x54) [<c00c41ac>] (sys_ioctl+0x34/0x54) from [<c0028aa0>] (ret_fast_syscall+0x0/0x2c) Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@st.com> Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
19e30c1437
commit
989508ba60
|
@ -1536,9 +1536,7 @@ static int stmmac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|||
if (!priv->phydev)
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock(&priv->lock);
|
||||
ret = phy_mii_ioctl(priv->phydev, rq, cmd);
|
||||
spin_unlock(&priv->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue