diff options
Diffstat (limited to 'drivers/s390/net/qeth_l2_main.c')
| -rw-r--r-- | drivers/s390/net/qeth_l2_main.c | 18 | 
1 files changed, 16 insertions, 2 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:  	return NETDEV_TX_OK;  } -static int qeth_l2_open(struct net_device *dev) +static int __qeth_l2_open(struct net_device *dev)  {  	struct qeth_card *card = dev->ml_priv;  	int rc = 0;  	QETH_CARD_TEXT(card, 4, "qethopen"); +	if (card->state == CARD_STATE_UP) +		return rc;  	if (card->state != CARD_STATE_SOFTSETUP)  		return -ENODEV; @@ -857,6 +859,18 @@ static int qeth_l2_open(struct net_device *dev)  	return rc;  } +static int qeth_l2_open(struct net_device *dev) +{ +	struct qeth_card *card = dev->ml_priv; + +	QETH_CARD_TEXT(card, 5, "qethope_"); +	if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { +		QETH_CARD_TEXT(card, 3, "openREC"); +		return -ERESTARTSYS; +	} +	return __qeth_l2_open(dev); +} +  static int qeth_l2_stop(struct net_device *dev)  {  	struct qeth_card *card = dev->ml_priv; @@ -1046,7 +1060,7 @@ contin:  	if (recover_flag == CARD_STATE_RECOVER) {  		if (recovery_mode &&  		    card->info.type != QETH_CARD_TYPE_OSN) { -			qeth_l2_open(card->dev); +			__qeth_l2_open(card->dev);  		} else {  			rtnl_lock();  			dev_open(card->dev);  |