kfree(channel->iob[cnt].data);
 }
 
-static void qeth_get_channel_path_desc(struct qeth_card *card)
+static void qeth_set_single_write_queues(struct qeth_card *card)
+{
+       if ((atomic_read(&card->qdio.state) != QETH_QDIO_UNINITIALIZED) &&
+           (card->qdio.no_out_queues == 4))
+               qeth_free_qdio_buffers(card);
+
+       card->qdio.no_out_queues = 1;
+       if (card->qdio.default_out_queue != 0)
+               dev_info(&card->gdev->dev, "Priority Queueing not supported\n");
+
+       card->qdio.default_out_queue = 0;
+}
+
+static void qeth_set_multiple_write_queues(struct qeth_card *card)
+{
+       if ((atomic_read(&card->qdio.state) != QETH_QDIO_UNINITIALIZED) &&
+           (card->qdio.no_out_queues == 1)) {
+               qeth_free_qdio_buffers(card);
+               card->qdio.default_out_queue = 2;
+       }
+       card->qdio.no_out_queues = 4;
+}
+
+static void qeth_update_from_chp_desc(struct qeth_card *card)
 {
        struct ccw_device *ccwdev;
        struct channelPath_dsc {
        QETH_DBF_TEXT(SETUP, 2, "chp_desc");
 
        ccwdev = card->data.ccwdev;
-       chp_dsc = (struct channelPath_dsc *)ccw_device_get_chp_desc(ccwdev, 0);
-       if (chp_dsc != NULL) {
-               if (card->info.type != QETH_CARD_TYPE_IQD) {
-                       /* CHPP field bit 6 == 1 -> single queue */
-                       if ((chp_dsc->chpp & 0x02) == 0x02) {
-                               if ((atomic_read(&card->qdio.state) !=
-                                       QETH_QDIO_UNINITIALIZED) &&
-                                   (card->qdio.no_out_queues == 4))
-                                       /* change from 4 to 1 outbound queues */
-                                       qeth_free_qdio_buffers(card);
-                               card->qdio.no_out_queues = 1;
-                               if (card->qdio.default_out_queue != 0)
-                                       dev_info(&card->gdev->dev,
-                                       "Priority Queueing not supported\n");
-                               card->qdio.default_out_queue = 0;
-                       } else {
-                               if ((atomic_read(&card->qdio.state) !=
-                                       QETH_QDIO_UNINITIALIZED) &&
-                                   (card->qdio.no_out_queues == 1)) {
-                                       /* change from 1 to 4 outbound queues */
-                                       qeth_free_qdio_buffers(card);
-                                       card->qdio.default_out_queue = 2;
-                               }
-                               card->qdio.no_out_queues = 4;
-                       }
-               }
-               card->info.func_level = 0x4100 + chp_dsc->desc;
-               kfree(chp_dsc);
-       }
+       chp_dsc = ccw_device_get_chp_desc(ccwdev, 0);
+       if (!chp_dsc)
+               goto out;
+
+       card->info.func_level = 0x4100 + chp_dsc->desc;
+       if (card->info.type == QETH_CARD_TYPE_IQD)
+               goto out;
+
+       /* CHPP field bit 6 == 1 -> single queue */
+       if ((chp_dsc->chpp & 0x02) == 0x02)
+               qeth_set_single_write_queues(card);
+       else
+               qeth_set_multiple_write_queues(card);
+out:
+       kfree(chp_dsc);
        QETH_DBF_TEXT_(SETUP, 2, "nr:%x", card->qdio.no_out_queues);
        QETH_DBF_TEXT_(SETUP, 2, "lvl:%02x", card->info.func_level);
-       return;
 }
 
 static void qeth_init_qdio_info(struct qeth_card *card)
                        card->qdio.no_in_queues = 1;
                        card->info.is_multicast_different =
                                known_devices[i][QETH_MULTICAST_IND];
-                       qeth_get_channel_path_desc(card);
+                       qeth_update_from_chp_desc(card);
                        return 0;
                }
                i++;
 
        QETH_DBF_TEXT(SETUP, 2, "hrdsetup");
        atomic_set(&card->force_alloc_skb, 0);
-       qeth_get_channel_path_desc(card);
+       qeth_update_from_chp_desc(card);
 retry:
        if (retries)
                QETH_DBF_MESSAGE(2, "%s Retrying to do IDX activates.\n",