linux/drivers/net/cxgb3
Steve Wise cf3760dad5 RDMA/cxgb3: deadlock in iw_cxgb3 can cause hang when configuring interface.
When the iw_cxgb3 module's cxgb3_client "add" func gets called by the
cxgb3 module, the iwarp driver ends up calling the ethtool ops get_drvinfo
function in cxgb3 to get the fw version and other info.  Currently the
iwarp driver grabs the rtnl lock around this down call to serialize.
As of 2.6.27 or so, things changed such that the rtnl lock is held around
the call to the netdev driver open function.  Also the cxgb3_client "add"
function doesn't get called if the device is down.

So, if you load cxgb3, then load iw_cxgb3, then ifconfig up the device,
the iw_cxgb3 add func gets called with the rtnl_lock held.   If you
load cxgb3, ifconfig up the device, then load iw_cxgb3, the add func
gets called without the rtnl_lock held.  The former causes the deadlock,
the latter does not.

In addition, there are iw_cxgb3 sysfs handlers that also can call
down into cxgb3 to gather the fw and hw versions.  These can be called
concurrently on different processors and at any time.  Thus we need to
push this serialization down in the cxgb3 driver get_drvinfo func.

The fix is to remove rtnl lock usage, and use a per-device lock in cxgb3.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
2008-11-11 03:52:10 -05:00
..
adapter.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
ael1002.c cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
common.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
cxgb3_ctl_defs.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
cxgb3_defs.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
cxgb3_ioctl.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
cxgb3_main.c RDMA/cxgb3: deadlock in iw_cxgb3 can cause hang when configuring interface. 2008-11-11 03:52:10 -05:00
cxgb3_offload.c cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
cxgb3_offload.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
firmware_exports.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
l2t.c cxgb3: Fix kernel crash caused by uninitialized l2t_entry.arpq 2008-10-22 06:22:14 -04:00
l2t.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
Makefile
mc5.c cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
regs.h cxgb3: More flexible support for PHY interrupts. 2008-10-08 17:39:00 -07:00
sge_defs.h cxgb3 - Set the CQ_ERR bit in CQ contexts. 2007-10-10 16:51:05 -07:00
sge.c cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
t3_cpl.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
t3_hw.c cxgb3 - eeprom read fixes 2008-11-11 03:50:36 -05:00
t3cdev.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
version.h cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
vsc8211.c cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00
xgmac.c cxgb3: extend copyrights to 2008 2008-10-13 18:47:30 -07:00