aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/ipath/ipath_iba6120.c
diff options
context:
space:
mode:
authorDave Olson <dave.olson@qlogic.com>2007-06-18 17:24:41 -0400
committerRoland Dreier <rolandd@cisco.com>2007-07-09 23:12:26 -0400
commit9380068fc2f230e7840ff87d3f1e6030ae2ee5e8 (patch)
tree693349ae9f8dc25156091f7834030b35e01f23e1 /drivers/infiniband/hw/ipath/ipath_iba6120.c
parent561095f20eeb5c6c05c303bad8cdb3f8a80821bc (diff)
IB/ipath: Use S_ABORT not cancel and abort on exit freeze mode after recovery
This centralizes the use of the abort functionality, removes the unneeded buffer cancel (abort does the same thing), sets up to ignore launch errors after abort, same as cancel. We need abort on exit from freeze mode to avoid having buffers stuck in the busy state, if a user process happened to complete the send while we were in freeze mode doing the recovery. Signed-off-by: Dave Olson <dave.olson@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/ipath/ipath_iba6120.c')
-rw-r--r--drivers/infiniband/hw/ipath/ipath_iba6120.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_iba6120.c b/drivers/infiniband/hw/ipath/ipath_iba6120.c
index b931057bb3e8..0c34555d4979 100644
--- a/drivers/infiniband/hw/ipath/ipath_iba6120.c
+++ b/drivers/infiniband/hw/ipath/ipath_iba6120.c
@@ -430,8 +430,19 @@ static void ipath_pe_handle_hwerrors(struct ipath_devdata *dd, char *msg,
430 *dd->ipath_statusp |= IPATH_STATUS_HWERROR; 430 *dd->ipath_statusp |= IPATH_STATUS_HWERROR;
431 dd->ipath_flags &= ~IPATH_INITTED; 431 dd->ipath_flags &= ~IPATH_INITTED;
432 } else { 432 } else {
433 ipath_dbg("Clearing freezemode on ignored hardware " 433 static u32 freeze_cnt;
434 "error\n"); 434
435 freeze_cnt++;
436 ipath_dbg("Clearing freezemode on ignored or recovered "
437 "hardware error (%u)\n", freeze_cnt);
438 /*
439 * clear all sends, becauase they have may been
440 * completed by usercode while in freeze mode, and
441 * therefore would not be sent, and eventually
442 * might cause the process to run out of bufs
443 */
444 ipath_cancel_sends(dd);
445 ctrl &= ~INFINIPATH_C_FREEZEMODE;
435 ipath_write_kreg(dd, dd->ipath_kregs->kr_control, 446 ipath_write_kreg(dd, dd->ipath_kregs->kr_control,
436 dd->ipath_control); 447 dd->ipath_control);
437 } 448 }
@@ -1371,7 +1382,6 @@ static int ipath_pe_txe_recover(struct ipath_devdata *dd)
1371 dev_info(&dd->pcidev->dev, 1382 dev_info(&dd->pcidev->dev,
1372 "Recovering from TXE PIO parity error\n"); 1383 "Recovering from TXE PIO parity error\n");
1373 } 1384 }
1374 ipath_disarm_senderrbufs(dd, 1);
1375 return 1; 1385 return 1;
1376} 1386}
1377 1387