aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw
diff options
context:
space:
mode:
authorSteve Wise <swise@opengridcomputing.com>2010-02-22 17:07:22 -0500
committerRoland Dreier <rolandd@cisco.com>2010-02-24 13:40:30 -0500
commit68baf495d8e559a82787f595fecc30a43bb89bb7 (patch)
tree5269f66a202062c078bd4b2590958063b75ea584 /drivers/infiniband/hw
parent5279d3ac2d9ca578d04c6f0c760485b0621eb393 (diff)
RDMA/cxgb3: Mark RDMA device with CXIO_ERROR_FATAL when removing
If cxgb3 calls the iw_cxgb3 t3cclient remove function due to a device removal event, then the iwch device must be marked with CXIO_ERROR_FATAL since the device below us is going away. Otherwise, we can get stuck in a deadlock as RDMA ULPs try and deallocate objects (like MRs, QPs, etc). So always mark the device with CXIO_ERROR_FATAL when removing. Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r--drivers/infiniband/hw/cxgb3/iwch.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/cxgb3/iwch.c b/drivers/infiniband/hw/cxgb3/iwch.c
index d992543890ee..ee1d8b4d4541 100644
--- a/drivers/infiniband/hw/cxgb3/iwch.c
+++ b/drivers/infiniband/hw/cxgb3/iwch.c
@@ -188,6 +188,7 @@ static void close_rnic_dev(struct t3cdev *tdev)
188 mutex_lock(&dev_mutex); 188 mutex_lock(&dev_mutex);
189 list_for_each_entry_safe(dev, tmp, &dev_list, entry) { 189 list_for_each_entry_safe(dev, tmp, &dev_list, entry) {
190 if (dev->rdev.t3cdev_p == tdev) { 190 if (dev->rdev.t3cdev_p == tdev) {
191 dev->rdev.flags = CXIO_ERROR_FATAL;
191 cancel_delayed_work_sync(&dev->db_drop_task); 192 cancel_delayed_work_sync(&dev->db_drop_task);
192 list_del(&dev->entry); 193 list_del(&dev->entry);
193 iwch_unregister_device(dev); 194 iwch_unregister_device(dev);