linux/drivers/infiniband/core
Roland Dreier 0e442afd92 IB/mad: Fix lock-lock-timer deadlock in RMPP code
Holding agent->lock across cancel_delayed_work() (which does
del_timer_sync()) in ib_cancel_rmpp_recvs() leads to lockdep reports of
possible lock-timer deadlocks if a consumer ever does something that
connects agent->lock to a lock taken in IRQ context (cf
http://marc.info/?l=linux-rdma&m=125243699026045).

Fix this by changing the list items to a new state "CANCELING" while
holding the lock, and then canceling the delayed work without holding
the lock.  If the delayed work runs after the lock is dropped, it will
see the state is CANCELING and return immediately, so the list will
stay stable while we traverse it with the lock not held.

Reviewed-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
2009-09-23 11:10:15 -07:00
..
addr.c RDMA: Add __init/__exit macros to addr.c and cma.c 2009-06-23 10:38:42 -07:00
agent.c IB/mad: agent_send_response() should be void 2007-08-03 10:45:17 -07:00
agent.h RDMA: Remove subversion $Id tags 2008-07-14 23:48:44 -07:00
cache.c RDMA: Remove subversion $Id tags 2008-07-14 23:48:44 -07:00
cm_msgs.h IB: Remove __constant_{endian} uses 2009-01-17 17:11:57 -08:00
cm.c IB: Remove __constant_{endian} uses 2009-01-17 17:11:57 -08:00
cma.c RDMA: Add __init/__exit macros to addr.c and cma.c 2009-06-23 10:38:42 -07:00
core_priv.h RDMA: Remove subversion $Id tags 2008-07-14 23:48:44 -07:00
device.c IB: Remove sysfs files before unregistering device 2009-02-25 13:27:46 -08:00
fmr_pool.c RDMA: Remove subversion $Id tags 2008-07-14 23:48:44 -07:00
iwcm.c RDMA/iwcm: Reject the connection when the cm_id is destroyed 2009-09-09 11:37:38 -07:00
iwcm.h
mad_priv.h IB/mad: Allow tuning of QP0 and QP1 sizes 2009-09-07 08:28:48 -07:00
mad_rmpp.c IB/mad: Fix lock-lock-timer deadlock in RMPP code 2009-09-23 11:10:15 -07:00
mad_rmpp.h RDMA: Remove subversion $Id tags 2008-07-14 23:48:44 -07:00
mad.c Merge branch 'mad' into for-linus 2009-09-10 21:19:45 -07:00
Makefile IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
multicast.c IB/core: Fix send multicast group leave retry 2009-09-05 20:24:24 -07:00
packer.c RDMA: Remove subversion $Id tags 2008-07-14 23:48:44 -07:00
sa_query.c IB: Use DEFINE_SPINLOCK() for static spinlocks 2009-09-05 20:24:23 -07:00
sa.h IB: Remove garbage non-ASCII characters from comments 2007-07-09 16:17:32 -07:00
smi.c IB/mad: Check hop count field in directed route MAD to avoid array overflow 2009-09-05 20:24:10 -07:00
smi.h IB/mad: Enable loopback of DR SMP responses from userspace 2008-01-25 14:15:25 -08:00
sysfs.c infiniband: remove driver_data direct access of struct device 2009-06-15 21:30:26 -07:00
ucm.c infiniband: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:39 -08:00
ucma.c RDMA/ucma: Test ucma_alloc_multicast() return against NULL, not with IS_ERR() 2008-10-10 12:00:19 -07:00
ud_header.c RDMA: Remove subversion $Id tags 2008-07-14 23:48:44 -07:00
umem.c RDMA: Remove subversion $Id tags 2008-07-14 23:48:44 -07:00
user_mad.c device create: infiniband: convert device_create_drvdata to device_create 2008-10-16 09:24:42 -07:00
uverbs_cmd.c RDMA/core: Add memory management extensions support 2008-07-14 23:48:45 -07:00
uverbs_main.c IB/uverbs: Return ENOSYS for unimplemented commands (not EINVAL) 2009-09-05 20:24:24 -07:00
uverbs_marshall.c RDMA/cma: Export rdma cm interface to userspace 2006-12-12 11:50:22 -08:00
uverbs.h RDMA: Remove subversion $Id tags 2008-07-14 23:48:44 -07:00
verbs.c IB/core: Reset to error QP state transition is not allowed 2008-07-14 23:48:46 -07:00