• S
    stmmac: remove spin_lock in stmmac_ioctl. · 989508ba
    Srinivas Kandagatla 提交于
    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: NSrinivas Kandagatla <srinivas.kandagatla@st.com>
    Signed-off-by: NGiuseppe Cavallaro <peppe.cavallaro@st.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    989508ba
stmmac_main.c 58.9 KB