aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/ipath/ipath_iba6110.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_iba6110.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_iba6110.c')
-rw-r--r--drivers/infiniband/hw/ipath/ipath_iba6110.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_iba6110.c b/drivers/infiniband/hw/ipath/ipath_iba6110.c
index d8ac9f18bf49..34d159ad97b4 100644
--- a/drivers/infiniband/hw/ipath/ipath_iba6110.c
+++ b/drivers/infiniband/hw/ipath/ipath_iba6110.c
@@ -509,6 +509,13 @@ static void ipath_ht_handle_hwerrors(struct ipath_devdata *dd, char *msg,
509 if (!hwerrs) { 509 if (!hwerrs) {
510 ipath_dbg("Clearing freezemode on ignored or " 510 ipath_dbg("Clearing freezemode on ignored or "
511 "recovered hardware error\n"); 511 "recovered hardware error\n");
512 /*
513 * clear all sends, becauase they have may been
514 * completed by usercode while in freeze mode, and
515 * therefore would not be sent, and eventually
516 * might cause the process to run out of bufs
517 */
518 ipath_cancel_sends(dd);
512 ctrl &= ~INFINIPATH_C_FREEZEMODE; 519 ctrl &= ~INFINIPATH_C_FREEZEMODE;
513 ipath_write_kreg(dd, dd->ipath_kregs->kr_control, 520 ipath_write_kreg(dd, dd->ipath_kregs->kr_control,
514 ctrl); 521 ctrl);
@@ -1566,11 +1573,6 @@ static int ipath_ht_early_init(struct ipath_devdata *dd)
1566 writel(16, piobuf); 1573 writel(16, piobuf);
1567 piobuf += pioincr; 1574 piobuf += pioincr;
1568 } 1575 }
1569 /*
1570 * self-clearing
1571 */
1572 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl,
1573 INFINIPATH_S_ABORT);
1574 1576
1575 ipath_get_eeprom_info(dd); 1577 ipath_get_eeprom_info(dd);
1576 if (dd->ipath_boardrev == 5 && dd->ipath_serial[0] == '1' && 1578 if (dd->ipath_boardrev == 5 && dd->ipath_serial[0] == '1' &&
@@ -1599,7 +1601,6 @@ static int ipath_ht_txe_recover(struct ipath_devdata *dd)
1599 } 1601 }
1600 dev_info(&dd->pcidev->dev, 1602 dev_info(&dd->pcidev->dev,
1601 "Recovering from TXE PIO parity error\n"); 1603 "Recovering from TXE PIO parity error\n");
1602 ipath_disarm_senderrbufs(dd, 1);
1603 return 1; 1604 return 1;
1604} 1605}
1605 1606