diff options
author | Jan-Bernd Themann <ossthema@de.ibm.com> | 2007-02-09 03:10:51 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-02-09 16:09:46 -0500 |
commit | d2db9eea7901d83e494340c93d131fc1fd463e4c (patch) | |
tree | 061610fc0237654c38308b6b1ccdabdc5d59102a /drivers/net/ehea/ehea_main.c | |
parent | eaefd5fb7d793c9c1bcef1b0c0d5ec3824a85b91 (diff) |
ehea: Fixed error recovery
Error recovery for QP errors: Reset QPs and dump error information
Signed-off-by: Jan-Bernd Themann <themann@de.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/ehea/ehea_main.c')
-rw-r--r-- | drivers/net/ehea/ehea_main.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index 9de2d38a5321..1ef3846a5ea0 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
@@ -76,7 +76,7 @@ void ehea_dump(void *adr, int len, char *msg) { | |||
76 | int x; | 76 | int x; |
77 | unsigned char *deb = adr; | 77 | unsigned char *deb = adr; |
78 | for (x = 0; x < len; x += 16) { | 78 | for (x = 0; x < len; x += 16) { |
79 | printk(DRV_NAME "%s adr=%p ofs=%04x %016lx %016lx\n", msg, | 79 | printk(DRV_NAME " %s adr=%p ofs=%04x %016lx %016lx\n", msg, |
80 | deb, x, *((u64*)&deb[0]), *((u64*)&deb[8])); | 80 | deb, x, *((u64*)&deb[0]), *((u64*)&deb[8])); |
81 | deb += 16; | 81 | deb += 16; |
82 | } | 82 | } |
@@ -555,6 +555,7 @@ static irqreturn_t ehea_qp_aff_irq_handler(int irq, void *param) | |||
555 | { | 555 | { |
556 | struct ehea_port *port = param; | 556 | struct ehea_port *port = param; |
557 | struct ehea_eqe *eqe; | 557 | struct ehea_eqe *eqe; |
558 | struct ehea_qp *qp; | ||
558 | u32 qp_token; | 559 | u32 qp_token; |
559 | 560 | ||
560 | eqe = ehea_poll_eq(port->qp_eq); | 561 | eqe = ehea_poll_eq(port->qp_eq); |
@@ -563,9 +564,14 @@ static irqreturn_t ehea_qp_aff_irq_handler(int irq, void *param) | |||
563 | qp_token = EHEA_BMASK_GET(EHEA_EQE_QP_TOKEN, eqe->entry); | 564 | qp_token = EHEA_BMASK_GET(EHEA_EQE_QP_TOKEN, eqe->entry); |
564 | ehea_error("QP aff_err: entry=0x%lx, token=0x%x", | 565 | ehea_error("QP aff_err: entry=0x%lx, token=0x%x", |
565 | eqe->entry, qp_token); | 566 | eqe->entry, qp_token); |
567 | |||
568 | qp = port->port_res[qp_token].qp; | ||
569 | ehea_error_data(port->adapter, qp->fw_handle); | ||
566 | eqe = ehea_poll_eq(port->qp_eq); | 570 | eqe = ehea_poll_eq(port->qp_eq); |
567 | } | 571 | } |
568 | 572 | ||
573 | queue_work(port->adapter->ehea_wq, &port->reset_task); | ||
574 | |||
569 | return IRQ_HANDLED; | 575 | return IRQ_HANDLED; |
570 | } | 576 | } |
571 | 577 | ||