aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/device.c
diff options
context:
space:
mode:
authorRoland Dreier <rolandd@cisco.com>2007-05-19 08:51:53 -0700
committerRoland Dreier <rolandd@cisco.com>2007-05-19 08:51:53 -0700
commit8b8c8bca3a63073bac20f0fca178e00fdf7f5a09 (patch)
tree59c7f4b6a502e99e620d20d9c251fdebb79cc34a /drivers/infiniband/core/device.c
parent7b82cd8ee7374f803a3daf9a6cbc6eb4bbb10a63 (diff)
downloadkernel_samsung_smdk4412-8b8c8bca3a63073bac20f0fca178e00fdf7f5a09.zip
kernel_samsung_smdk4412-8b8c8bca3a63073bac20f0fca178e00fdf7f5a09.tar.gz
kernel_samsung_smdk4412-8b8c8bca3a63073bac20f0fca178e00fdf7f5a09.tar.bz2
IB/ipath: Fix potential deadlock with multicast spinlocks
Lockdep found the following potential deadlock between mcast_lock and n_mcast_grps_lock: mcast_lock is taken from both interrupt context and process context, so spin_lock_irqsave() must be used to take it. n_mcast_grps_lock is only taken from process context, so at first it seems safe to take it with plain spin_lock(); however, it also nests inside mcast_lock, and hence we could deadlock: cpu A cpu B ipath_mcast_add(): spin_lock_irq(&mcast_lock); ipath_mcast_detach(): spin_lock(&n_mcast_grps_lock); <enter interrupt> ipath_mcast_find(): spin_lock_irqsave(&mcast_lock); spin_lock(&n_mcast_grps_lock); Fix this by using spin_lock_irq() to take n_mcast_grps_lock. Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/core/device.c')
0 files changed, 0 insertions, 0 deletions