]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/s390/net/qeth_l3_main.c
s390/qeth: remove a redundant check for card->dev
[linux.git] / drivers / s390 / net / qeth_l3_main.c
index 07c3149e228c64fd6c4dbd4a578f9a3833e53fc8..13d77957404c317307984bc99434c6986480579d 100644 (file)
@@ -1406,7 +1406,7 @@ static int qeth_l3_process_inbound_buffer(struct qeth_card *card,
        return work_done;
 }
 
-static void qeth_l3_stop_card(struct qeth_card *card, int recovery_mode)
+static void qeth_l3_stop_card(struct qeth_card *card)
 {
        QETH_DBF_TEXT(SETUP, 2, "stopcard");
        QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
@@ -1417,16 +1417,8 @@ static void qeth_l3_stop_card(struct qeth_card *card, int recovery_mode)
                qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE);
        if (card->read.state == CH_STATE_UP &&
            card->write.state == CH_STATE_UP &&
-           (card->state == CARD_STATE_UP)) {
-               if (recovery_mode)
-                       qeth_stop(card->dev);
-               else {
-                       rtnl_lock();
-                       dev_close(card->dev);
-                       rtnl_unlock();
-               }
+           card->state == CARD_STATE_UP)
                card->state = CARD_STATE_SOFTSETUP;
-       }
        if (card->state == CARD_STATE_SOFTSETUP) {
                qeth_l3_clear_ip_htable(card, 1);
                qeth_clear_ipacmd_list(card);
@@ -2299,12 +2291,11 @@ static void qeth_l3_remove_device(struct ccwgroup_device *cgdev)
        qeth_l3_clear_ipato_list(card);
 }
 
-static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode)
+static int qeth_l3_set_online(struct ccwgroup_device *gdev)
 {
        struct qeth_card *card = dev_get_drvdata(&gdev->dev);
        struct net_device *dev = card->dev;
        int rc = 0;
-       enum qeth_card_states recover_flag;
        bool carrier_ok;
 
        mutex_lock(&card->discipline_mutex);
@@ -2312,7 +2303,6 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode)
        QETH_DBF_TEXT(SETUP, 2, "setonlin");
        QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
 
-       recover_flag = card->state;
        rc = qeth_core_hardsetup_card(card, &carrier_ok);
        if (rc) {
                QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc);
@@ -2375,13 +2365,9 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode)
                netif_device_attach(dev);
                qeth_enable_hw_features(dev);
 
-               if (recover_flag == CARD_STATE_RECOVER) {
-                       if (recovery_mode) {
-                               qeth_open(dev);
-                               qeth_l3_set_rx_mode(dev);
-                       } else {
-                               dev_open(dev, NULL);
-                       }
+               if (card->info.open_when_online) {
+                       card->info.open_when_online = 0;
+                       dev_open(dev, NULL);
                }
                rtnl_unlock();
        }
@@ -2392,49 +2378,43 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode)
        mutex_unlock(&card->discipline_mutex);
        return 0;
 out_remove:
-       qeth_l3_stop_card(card, 0);
+       qeth_l3_stop_card(card);
        ccw_device_set_offline(CARD_DDEV(card));
        ccw_device_set_offline(CARD_WDEV(card));
        ccw_device_set_offline(CARD_RDEV(card));
        qdio_free(CARD_DDEV(card));
-       if (recover_flag == CARD_STATE_RECOVER)
-               card->state = CARD_STATE_RECOVER;
-       else
-               card->state = CARD_STATE_DOWN;
+       card->state = CARD_STATE_DOWN;
+
        mutex_unlock(&card->conf_mutex);
        mutex_unlock(&card->discipline_mutex);
        return rc;
 }
 
-static int qeth_l3_set_online(struct ccwgroup_device *gdev)
-{
-       return __qeth_l3_set_online(gdev, 0);
-}
-
 static int __qeth_l3_set_offline(struct ccwgroup_device *cgdev,
                        int recovery_mode)
 {
        struct qeth_card *card = dev_get_drvdata(&cgdev->dev);
        int rc = 0, rc2 = 0, rc3 = 0;
-       enum qeth_card_states recover_flag;
 
        mutex_lock(&card->discipline_mutex);
        mutex_lock(&card->conf_mutex);
        QETH_DBF_TEXT(SETUP, 3, "setoffl");
        QETH_DBF_HEX(SETUP, 3, &card, sizeof(void *));
 
+       if ((!recovery_mode && card->info.hwtrap) || card->info.hwtrap == 2) {
+               qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM);
+               card->info.hwtrap = 1;
+       }
+
        rtnl_lock();
+       card->info.open_when_online = card->dev->flags & IFF_UP;
+       dev_close(card->dev);
        netif_device_detach(card->dev);
        netif_carrier_off(card->dev);
        rtnl_unlock();
 
-       recover_flag = card->state;
-       if ((!recovery_mode && card->info.hwtrap) || card->info.hwtrap == 2) {
-               qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM);
-               card->info.hwtrap = 1;
-       }
-       qeth_l3_stop_card(card, recovery_mode);
-       if ((card->options.cq == QETH_CQ_ENABLED) && card->dev) {
+       qeth_l3_stop_card(card);
+       if (card->options.cq == QETH_CQ_ENABLED) {
                rtnl_lock();
                call_netdevice_notifiers(NETDEV_REBOOT, card->dev);
                rtnl_unlock();
@@ -2447,8 +2427,7 @@ static int __qeth_l3_set_offline(struct ccwgroup_device *cgdev,
        if (rc)
                QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
        qdio_free(CARD_DDEV(card));
-       if (recover_flag == CARD_STATE_UP)
-               card->state = CARD_STATE_RECOVER;
+
        /* let user_space know that device is offline */
        kobject_uevent(&cgdev->dev.kobj, KOBJ_CHANGE);
        mutex_unlock(&card->conf_mutex);
@@ -2475,7 +2454,7 @@ static int qeth_l3_recover(void *ptr)
        dev_warn(&card->gdev->dev,
                "A recovery process has been started for the device\n");
        __qeth_l3_set_offline(card->gdev, 1);
-       rc = __qeth_l3_set_online(card->gdev, 1);
+       rc = qeth_l3_set_online(card->gdev);
        if (!rc)
                dev_info(&card->gdev->dev,
                        "Device successfully recovered!\n");
@@ -2509,17 +2488,9 @@ static int qeth_l3_pm_suspend(struct ccwgroup_device *gdev)
 static int qeth_l3_pm_resume(struct ccwgroup_device *gdev)
 {
        struct qeth_card *card = dev_get_drvdata(&gdev->dev);
-       int rc = 0;
+       int rc;
 
-       if (card->state == CARD_STATE_RECOVER) {
-               rc = __qeth_l3_set_online(card->gdev, 1);
-               if (rc) {
-                       rtnl_lock();
-                       dev_close(card->dev);
-                       rtnl_unlock();
-               }
-       } else
-               rc = __qeth_l3_set_online(card->gdev, 0);
+       rc = qeth_l3_set_online(gdev);
 
        qeth_set_allowed_threads(card, 0xffffffff, 0);
        if (rc)