• Ursula Braun's avatar
    net/smc: fix sleep bug in smc_pnet_find_roce_resource() · 92f3cb0e
    Ursula Braun authored
    Tests showed this BUG:
    [572555.252867] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:935
    [572555.252876] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 131031, name: smcapp
    [572555.252879] INFO: lockdep is turned off.
    [572555.252883] CPU: 1 PID: 131031 Comm: smcapp Tainted: G           O      5.7.0-rc3uschi+ #356
    [572555.252885] Hardware name: IBM 3906 M03 703 (LPAR)
    [572555.252887] Call Trace:
    [572555.252896]  [<00000000ac364554>] show_stack+0x94/0xe8
    [572555.252901]  [<00000000aca1f400>] dump_stack+0xa0/0xe0
    [572555.252906]  [<00000000ac3c8c10>] ___might_sleep+0x260/0x280
    [572555.252910]  [<00000000acdc0c98>] __mutex_lock+0x48/0x940
    [572555.252912]  [<00000000acdc15c2>] mutex_lock_nested+0x32/0x40
    [572555.252975]  [<000003ff801762d0>] mlx5_lag_get_roce_netdev+0x30/0xc0 [mlx5_core]
    [572555.252996]  [<000003ff801fb3aa>] mlx5_ib_get_netdev+0x3a/0xe0 [mlx5_ib]
    [572555.253007]  [<000003ff80063848>] smc_pnet_find_roce_resource+0x1d8/0x310 [smc]
    [572555.253011]  [<000003ff800602f0>] __smc_connect+0x1f0/0x3e0 [smc]
    [572555.253015]  [<000003ff80060634>] smc_connect+0x154/0x190 [smc]
    [572555.253022]  [<00000000acbed8d4>] __sys_connect+0x94/0xd0
    [572555.253025]  [<00000000acbef620>] __s390x_sys_socketcall+0x170/0x360
    [572555.253028]  [<00000000acdc6800>] system_call+0x298/0x2b8
    [572555.253030] INFO: lockdep is turned off.
    
    Function smc_pnet_find_rdma_dev() might be called from
    smc_pnet_find_roce_resource(). It holds the smc_ib_devices list
    spinlock while calling infiniband op get_netdev(). At least for mlx5
    the get_netdev operation wants mutex serialization, which conflicts
    with the smc_ib_devices spinlock.
    This patch switches the smc_ib_devices spinlock into a mutex to
    allow sleeping when calling get_netdev().
    
    Fixes: a4cf0443 ("smc: introduce SMC as an IB-client")
    Signed-off-by: default avatarUrsula Braun <ubraun@linux.ibm.com>
    Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    92f3cb0e
smc_core.c 52.2 KB