diff options
author | Jan Glauber <jang@linux.vnet.ibm.com> | 2012-05-09 10:27:34 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-05-16 08:42:36 -0400 |
commit | 1549d13f4c5f0ca77b66bd725287d0b3f877eb6b (patch) | |
tree | 5ba439915cc4cceb8930a18e9adf2aba34adc82f /drivers/s390/net | |
parent | 050276ab8ce9f30c1d2d74c42a349ed54701905f (diff) |
s390/qdio: Cleanup error handling to drivers
Various improvements of qdio error reporting to the
upper-layer drivers (qeth, zfcp):
- Split QDIO_ERROR_ACTIVATE_CHECK_CONDITION into:
QDIO_ERROR_ACTIVATE: qdio termination interrupt
QDIO_ERROR_GET_BUF_STATE: QIOASSIST eqbs error
QDIO_ERROR_SET_BUF_STATE: QIOASSIST sqbs error
Add QDIO_ERROR_FATAL / QDIO_ERROR_TEMPORARY masks
to ease recovery decision in upper-layer drivers.
- Don't (ab-)use qdio handler errors as return codes
for do_QDIO but use standard error codes:
-ENOBUFS: temporary target CC=2 condition
-EBUSY: unresolved SIGA-W CC=2 busy condition
-EIO: I/O error (CC=1, CC=3)
- Remove unneeded memory clobber from SIGA-R
- Remove EX_TABLE entry on SIGA-W, we want to see these errors
Reviewed-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/net')
-rw-r--r-- | drivers/s390/net/qeth_core_main.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c index 8334dadc681d..c146877e8b7b 100644 --- a/drivers/s390/net/qeth_core_main.c +++ b/drivers/s390/net/qeth_core_main.c | |||
@@ -3339,7 +3339,7 @@ static void qeth_flush_buffers(struct qeth_qdio_out_q *queue, int index, | |||
3339 | if (rc) { | 3339 | if (rc) { |
3340 | queue->card->stats.tx_errors += count; | 3340 | queue->card->stats.tx_errors += count; |
3341 | /* ignore temporary SIGA errors without busy condition */ | 3341 | /* ignore temporary SIGA errors without busy condition */ |
3342 | if (rc == QDIO_ERROR_SIGA_TARGET) | 3342 | if (rc == -ENOBUFS) |
3343 | return; | 3343 | return; |
3344 | QETH_CARD_TEXT(queue->card, 2, "flushbuf"); | 3344 | QETH_CARD_TEXT(queue->card, 2, "flushbuf"); |
3345 | QETH_CARD_TEXT_(queue->card, 2, " q%d", queue->queue_no); | 3345 | QETH_CARD_TEXT_(queue->card, 2, " q%d", queue->queue_no); |
@@ -3533,7 +3533,7 @@ void qeth_qdio_output_handler(struct ccw_device *ccwdev, | |||
3533 | int i; | 3533 | int i; |
3534 | 3534 | ||
3535 | QETH_CARD_TEXT(card, 6, "qdouhdl"); | 3535 | QETH_CARD_TEXT(card, 6, "qdouhdl"); |
3536 | if (qdio_error & QDIO_ERROR_ACTIVATE_CHECK_CONDITION) { | 3536 | if (qdio_error & QDIO_ERROR_FATAL) { |
3537 | QETH_CARD_TEXT(card, 2, "achkcond"); | 3537 | QETH_CARD_TEXT(card, 2, "achkcond"); |
3538 | netif_stop_queue(card->dev); | 3538 | netif_stop_queue(card->dev); |
3539 | qeth_schedule_recovery(card); | 3539 | qeth_schedule_recovery(card); |