8b8c8bca3a
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> |
||
---|---|---|
.. | ||
ipath_common.h | ||
ipath_cq.c | ||
ipath_debug.h | ||
ipath_diag.c | ||
ipath_dma.c | ||
ipath_driver.c | ||
ipath_eeprom.c | ||
ipath_file_ops.c | ||
ipath_fs.c | ||
ipath_iba6110.c | ||
ipath_iba6120.c | ||
ipath_init_chip.c | ||
ipath_intr.c | ||
ipath_kernel.h | ||
ipath_keys.c | ||
ipath_layer.c | ||
ipath_layer.h | ||
ipath_mad.c | ||
ipath_mmap.c | ||
ipath_mr.c | ||
ipath_qp.c | ||
ipath_rc.c | ||
ipath_registers.h | ||
ipath_ruc.c | ||
ipath_srq.c | ||
ipath_stats.c | ||
ipath_sysfs.c | ||
ipath_uc.c | ||
ipath_ud.c | ||
ipath_user_pages.c | ||
ipath_verbs_mcast.c | ||
ipath_verbs.c | ||
ipath_verbs.h | ||
ipath_wc_ppc64.c | ||
ipath_wc_x86_64.c | ||
Kconfig | ||
Makefile |