]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/s390/net/qeth_l2_main.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[mv-sheeva.git] / drivers / s390 / net / qeth_l2_main.c
index 3ac3cc1e03ccfc1ee7db35a63be8b643711036b3..955ba7a31b90606dcdaa5309d781a2a27983e2a0 100644 (file)
@@ -395,7 +395,8 @@ static int qeth_l2_stop_card(struct qeth_card *card, int recovery_mode)
        }
        if (card->state == CARD_STATE_SOFTSETUP) {
                qeth_l2_process_vlans(card, 1);
-               qeth_l2_del_all_mc(card);
+               if (!card->use_hard_stop)
+                       qeth_l2_del_all_mc(card);
                qeth_clear_ipacmd_list(card);
                card->state = CARD_STATE_HARDSETUP;
        }
@@ -559,7 +560,8 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
                        "device %s: x%x\n", CARD_BUS_ID(card), rc);
        }
 
-       if (card->info.guestlan) {
+       if ((card->info.type == QETH_CARD_TYPE_IQD) || 
+           (card->info.guestlan)) {
                rc = qeth_setadpparms_change_macaddr(card);
                if (rc) {
                        QETH_DBF_MESSAGE(2, "couldn't get MAC address on "
@@ -825,7 +827,6 @@ static int qeth_l2_open(struct net_device *dev)
        }
        card->data.state = CH_STATE_UP;
        card->state = CARD_STATE_UP;
-       card->dev->flags |= IFF_UP;
        netif_start_queue(dev);
 
        if (!card->lan_online && netif_carrier_ok(dev))
@@ -840,7 +841,6 @@ static int qeth_l2_stop(struct net_device *dev)
 
        QETH_DBF_TEXT(TRACE, 4, "qethstop");
        netif_tx_disable(dev);
-       card->dev->flags &= ~IFF_UP;
        if (card->state == CARD_STATE_UP)
                card->state = CARD_STATE_SOFTSETUP;
        return 0;
@@ -1137,9 +1137,13 @@ static int qeth_l2_recover(void *ptr)
        if (!rc)
                PRINT_INFO("Device %s successfully recovered!\n",
                           CARD_BUS_ID(card));
-       else
+       else {
+               rtnl_lock();
+               dev_close(card->dev);
+               rtnl_unlock();
                PRINT_INFO("Device %s could not be recovered!\n",
                           CARD_BUS_ID(card));
+       }
        return 0;
 }