diff options
author | Steve Wise <swise@opengridcomputing.com> | 2010-02-22 17:07:22 -0500 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2010-02-24 13:40:30 -0500 |
commit | 68baf495d8e559a82787f595fecc30a43bb89bb7 (patch) | |
tree | 5269f66a202062c078bd4b2590958063b75ea584 /drivers/infiniband/hw/cxgb3 | |
parent | 5279d3ac2d9ca578d04c6f0c760485b0621eb393 (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/cxgb3')
-rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch.c | 1 |
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); |