diff options
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/net/lcs.c | 11 | ||||
-rw-r--r-- | drivers/s390/net/lcs.h | 1 |
2 files changed, 9 insertions, 3 deletions
diff --git a/drivers/s390/net/lcs.c b/drivers/s390/net/lcs.c index e4b11afbbc9f..0fd663b23d76 100644 --- a/drivers/s390/net/lcs.c +++ b/drivers/s390/net/lcs.c | |||
@@ -1400,11 +1400,14 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb) | |||
1400 | PRINT_WARN("check on device %s, dstat=0x%X, cstat=0x%X \n", | 1400 | PRINT_WARN("check on device %s, dstat=0x%X, cstat=0x%X \n", |
1401 | cdev->dev.bus_id, dstat, cstat); | 1401 | cdev->dev.bus_id, dstat, cstat); |
1402 | if (rc) { | 1402 | if (rc) { |
1403 | lcs_schedule_recovery(card); | 1403 | channel->state = LCS_CH_STATE_ERROR; |
1404 | wake_up(&card->wait_q); | ||
1405 | return; | ||
1406 | } | 1404 | } |
1407 | } | 1405 | } |
1406 | if (channel->state == LCS_CH_STATE_ERROR) { | ||
1407 | lcs_schedule_recovery(card); | ||
1408 | wake_up(&card->wait_q); | ||
1409 | return; | ||
1410 | } | ||
1408 | /* How far in the ccw chain have we processed? */ | 1411 | /* How far in the ccw chain have we processed? */ |
1409 | if ((channel->state != LCS_CH_STATE_INIT) && | 1412 | if ((channel->state != LCS_CH_STATE_INIT) && |
1410 | (irb->scsw.fctl & SCSW_FCTL_START_FUNC)) { | 1413 | (irb->scsw.fctl & SCSW_FCTL_START_FUNC)) { |
@@ -1708,6 +1711,8 @@ lcs_stopcard(struct lcs_card *card) | |||
1708 | 1711 | ||
1709 | if (card->read.state != LCS_CH_STATE_STOPPED && | 1712 | if (card->read.state != LCS_CH_STATE_STOPPED && |
1710 | card->write.state != LCS_CH_STATE_STOPPED && | 1713 | card->write.state != LCS_CH_STATE_STOPPED && |
1714 | card->read.state != LCS_CH_STATE_ERROR && | ||
1715 | card->write.state != LCS_CH_STATE_ERROR && | ||
1711 | card->state == DEV_STATE_UP) { | 1716 | card->state == DEV_STATE_UP) { |
1712 | lcs_clear_multicast_list(card); | 1717 | lcs_clear_multicast_list(card); |
1713 | rc = lcs_send_stoplan(card,LCS_INITIATOR_TCPIP); | 1718 | rc = lcs_send_stoplan(card,LCS_INITIATOR_TCPIP); |
diff --git a/drivers/s390/net/lcs.h b/drivers/s390/net/lcs.h index 0e1e4a0a88f0..8976fb0b070a 100644 --- a/drivers/s390/net/lcs.h +++ b/drivers/s390/net/lcs.h | |||
@@ -138,6 +138,7 @@ enum lcs_channel_states { | |||
138 | LCS_CH_STATE_RUNNING, | 138 | LCS_CH_STATE_RUNNING, |
139 | LCS_CH_STATE_SUSPENDED, | 139 | LCS_CH_STATE_SUSPENDED, |
140 | LCS_CH_STATE_CLEARED, | 140 | LCS_CH_STATE_CLEARED, |
141 | LCS_CH_STATE_ERROR, | ||
141 | }; | 142 | }; |
142 | 143 | ||
143 | /** | 144 | /** |