diff options
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/net/qeth_l2_main.c | 18 | ||||
-rw-r--r-- | drivers/s390/net/qeth_l3_main.c | 18 |
2 files changed, 32 insertions, 4 deletions
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c index 7a7a1b66478..2ac8f6aff5a 100644 --- a/drivers/s390/net/qeth_l2_main.c +++ b/drivers/s390/net/qeth_l2_main.c | |||
@@ -831,12 +831,14 @@ tx_drop: | |||
831 | return NETDEV_TX_OK; | 831 | return NETDEV_TX_OK; |
832 | } | 832 | } |
833 | 833 | ||
834 | static int qeth_l2_open(struct net_device *dev) | 834 | static int __qeth_l2_open(struct net_device *dev) |
835 | { | 835 | { |
836 | struct qeth_card *card = dev->ml_priv; | 836 | struct qeth_card *card = dev->ml_priv; |
837 | int rc = 0; | 837 | int rc = 0; |
838 | 838 | ||
839 | QETH_CARD_TEXT(card, 4, "qethopen"); | 839 | QETH_CARD_TEXT(card, 4, "qethopen"); |
840 | if (card->state == CARD_STATE_UP) | ||
841 | return rc; | ||
840 | if (card->state != CARD_STATE_SOFTSETUP) | 842 | if (card->state != CARD_STATE_SOFTSETUP) |
841 | return -ENODEV; | 843 | return -ENODEV; |
842 | 844 | ||
@@ -857,6 +859,18 @@ static int qeth_l2_open(struct net_device *dev) | |||
857 | return rc; | 859 | return rc; |
858 | } | 860 | } |
859 | 861 | ||
862 | static int qeth_l2_open(struct net_device *dev) | ||
863 | { | ||
864 | struct qeth_card *card = dev->ml_priv; | ||
865 | |||
866 | QETH_CARD_TEXT(card, 5, "qethope_"); | ||
867 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { | ||
868 | QETH_CARD_TEXT(card, 3, "openREC"); | ||
869 | return -ERESTARTSYS; | ||
870 | } | ||
871 | return __qeth_l2_open(dev); | ||
872 | } | ||
873 | |||
860 | static int qeth_l2_stop(struct net_device *dev) | 874 | static int qeth_l2_stop(struct net_device *dev) |
861 | { | 875 | { |
862 | struct qeth_card *card = dev->ml_priv; | 876 | struct qeth_card *card = dev->ml_priv; |
@@ -1046,7 +1060,7 @@ contin: | |||
1046 | if (recover_flag == CARD_STATE_RECOVER) { | 1060 | if (recover_flag == CARD_STATE_RECOVER) { |
1047 | if (recovery_mode && | 1061 | if (recovery_mode && |
1048 | card->info.type != QETH_CARD_TYPE_OSN) { | 1062 | card->info.type != QETH_CARD_TYPE_OSN) { |
1049 | qeth_l2_open(card->dev); | 1063 | __qeth_l2_open(card->dev); |
1050 | } else { | 1064 | } else { |
1051 | rtnl_lock(); | 1065 | rtnl_lock(); |
1052 | dev_open(card->dev); | 1066 | dev_open(card->dev); |
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); |