diff options
Diffstat (limited to 'drivers/s390/net/qeth_l3_main.c')
-rw-r--r-- | drivers/s390/net/qeth_l3_main.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c index e227e465bfc..988255b443e 100644 --- a/drivers/s390/net/qeth_l3_main.c +++ b/drivers/s390/net/qeth_l3_main.c | |||
@@ -3240,12 +3240,14 @@ tx_drop: | |||
3240 | return NETDEV_TX_OK; | 3240 | return NETDEV_TX_OK; |
3241 | } | 3241 | } |
3242 | 3242 | ||
3243 | static int qeth_l3_open(struct net_device *dev) | 3243 | static int __qeth_l3_open(struct net_device *dev) |
3244 | { | 3244 | { |
3245 | struct qeth_card *card = dev->ml_priv; | 3245 | struct qeth_card *card = dev->ml_priv; |
3246 | int rc = 0; | 3246 | int rc = 0; |
3247 | 3247 | ||
3248 | QETH_CARD_TEXT(card, 4, "qethopen"); | 3248 | QETH_CARD_TEXT(card, 4, "qethopen"); |
3249 | if (card->state == CARD_STATE_UP) | ||
3250 | return rc; | ||
3249 | if (card->state != CARD_STATE_SOFTSETUP) | 3251 | if (card->state != CARD_STATE_SOFTSETUP) |
3250 | return -ENODEV; | 3252 | return -ENODEV; |
3251 | card->data.state = CH_STATE_UP; | 3253 | card->data.state = CH_STATE_UP; |
@@ -3260,6 +3262,18 @@ static int qeth_l3_open(struct net_device *dev) | |||
3260 | return rc; | 3262 | return rc; |
3261 | } | 3263 | } |
3262 | 3264 | ||
3265 | static int qeth_l3_open(struct net_device *dev) | ||
3266 | { | ||
3267 | struct qeth_card *card = dev->ml_priv; | ||
3268 | |||
3269 | QETH_CARD_TEXT(card, 5, "qethope_"); | ||
3270 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { | ||
3271 | QETH_CARD_TEXT(card, 3, "openREC"); | ||
3272 | return -ERESTARTSYS; | ||
3273 | } | ||
3274 | return __qeth_l3_open(dev); | ||
3275 | } | ||
3276 | |||
3263 | static int qeth_l3_stop(struct net_device *dev) | 3277 | static int qeth_l3_stop(struct net_device *dev) |
3264 | { | 3278 | { |
3265 | struct qeth_card *card = dev->ml_priv; | 3279 | struct qeth_card *card = dev->ml_priv; |
@@ -3564,7 +3578,7 @@ contin: | |||
3564 | netif_carrier_off(card->dev); | 3578 | netif_carrier_off(card->dev); |
3565 | if (recover_flag == CARD_STATE_RECOVER) { | 3579 | if (recover_flag == CARD_STATE_RECOVER) { |
3566 | if (recovery_mode) | 3580 | if (recovery_mode) |
3567 | qeth_l3_open(card->dev); | 3581 | __qeth_l3_open(card->dev); |
3568 | else { | 3582 | else { |
3569 | rtnl_lock(); | 3583 | rtnl_lock(); |
3570 | dev_open(card->dev); | 3584 | dev_open(card->dev); |