|
|
@@ -1370,7 +1370,7 @@ static void qeth_set_multiple_write_queues(struct qeth_card *card)
|
|
|
card->qdio.no_out_queues = 4;
|
|
|
}
|
|
|
|
|
|
-static void qeth_update_from_chp_desc(struct qeth_card *card)
|
|
|
+static int qeth_update_from_chp_desc(struct qeth_card *card)
|
|
|
{
|
|
|
struct ccw_device *ccwdev;
|
|
|
struct channel_path_desc_fmt0 *chp_dsc;
|
|
|
@@ -1380,7 +1380,7 @@ static void qeth_update_from_chp_desc(struct qeth_card *card)
|
|
|
ccwdev = card->data.ccwdev;
|
|
|
chp_dsc = ccw_device_get_chp_desc(ccwdev, 0);
|
|
|
if (!chp_dsc)
|
|
|
- goto out;
|
|
|
+ return -ENOMEM;
|
|
|
|
|
|
card->info.func_level = 0x4100 + chp_dsc->desc;
|
|
|
if (card->info.type == QETH_CARD_TYPE_IQD)
|
|
|
@@ -1395,6 +1395,7 @@ 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 0;
|
|
|
}
|
|
|
|
|
|
static void qeth_init_qdio_info(struct qeth_card *card)
|
|
|
@@ -5090,7 +5091,9 @@ int qeth_core_hardsetup_card(struct qeth_card *card)
|
|
|
|
|
|
QETH_DBF_TEXT(SETUP, 2, "hrdsetup");
|
|
|
atomic_set(&card->force_alloc_skb, 0);
|
|
|
- qeth_update_from_chp_desc(card);
|
|
|
+ rc = qeth_update_from_chp_desc(card);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
retry:
|
|
|
if (retries < 3)
|
|
|
QETH_DBF_MESSAGE(2, "%s Retrying to do IDX activates.\n",
|
|
|
@@ -5768,7 +5771,9 @@ static int qeth_core_probe_device(struct ccwgroup_device *gdev)
|
|
|
gdev->cdev[2]->handler = qeth_irq;
|
|
|
|
|
|
qeth_setup_card(card);
|
|
|
- qeth_update_from_chp_desc(card);
|
|
|
+ rc = qeth_update_from_chp_desc(card);
|
|
|
+ if (rc)
|
|
|
+ goto err_chp_desc;
|
|
|
|
|
|
card->dev = qeth_alloc_netdev(card);
|
|
|
if (!card->dev) {
|
|
|
@@ -5806,6 +5811,7 @@ err_disc:
|
|
|
qeth_core_free_discipline(card);
|
|
|
err_load:
|
|
|
free_netdev(card->dev);
|
|
|
+err_chp_desc:
|
|
|
err_card:
|
|
|
qeth_core_free_card(card);
|
|
|
err_dev:
|