diff options
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/net/ctcm_fsms.c | 2 | ||||
-rw-r--r-- | drivers/s390/net/ctcm_main.c | 2 | ||||
-rw-r--r-- | drivers/s390/net/lcs.c | 2 | ||||
-rw-r--r-- | drivers/s390/net/qeth_core_main.c | 78 | ||||
-rw-r--r-- | drivers/s390/net/qeth_l3_main.c | 2 |
5 files changed, 48 insertions, 38 deletions
diff --git a/drivers/s390/net/ctcm_fsms.c b/drivers/s390/net/ctcm_fsms.c index d4ade9e92fbb..fb92524d24ef 100644 --- a/drivers/s390/net/ctcm_fsms.c +++ b/drivers/s390/net/ctcm_fsms.c | |||
@@ -1523,7 +1523,7 @@ static void ctcmpc_chx_firstio(fsm_instance *fi, int event, void *arg) | |||
1523 | goto done; | 1523 | goto done; |
1524 | default: | 1524 | default: |
1525 | break; | 1525 | break; |
1526 | }; | 1526 | } |
1527 | 1527 | ||
1528 | fsm_newstate(fi, (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) | 1528 | fsm_newstate(fi, (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) |
1529 | ? CTC_STATE_RXINIT : CTC_STATE_TXINIT); | 1529 | ? CTC_STATE_RXINIT : CTC_STATE_TXINIT); |
diff --git a/drivers/s390/net/ctcm_main.c b/drivers/s390/net/ctcm_main.c index 5227e5734a9d..98ea9cc6f1aa 100644 --- a/drivers/s390/net/ctcm_main.c +++ b/drivers/s390/net/ctcm_main.c | |||
@@ -1454,7 +1454,7 @@ static int add_channel(struct ccw_device *cdev, enum ctcm_channel_types type, | |||
1454 | ch_fsm_len, GFP_KERNEL); | 1454 | ch_fsm_len, GFP_KERNEL); |
1455 | } | 1455 | } |
1456 | if (ch->fsm == NULL) | 1456 | if (ch->fsm == NULL) |
1457 | goto free_return; | 1457 | goto nomem_return; |
1458 | 1458 | ||
1459 | fsm_newstate(ch->fsm, CTC_STATE_IDLE); | 1459 | fsm_newstate(ch->fsm, CTC_STATE_IDLE); |
1460 | 1460 | ||
diff --git a/drivers/s390/net/lcs.c b/drivers/s390/net/lcs.c index a3adf4b1c60d..2ca0f1dd7a00 100644 --- a/drivers/s390/net/lcs.c +++ b/drivers/s390/net/lcs.c | |||
@@ -282,7 +282,7 @@ lcs_setup_write_ccws(struct lcs_card *card) | |||
282 | 282 | ||
283 | LCS_DBF_TEXT(3, setup, "iwritccw"); | 283 | LCS_DBF_TEXT(3, setup, "iwritccw"); |
284 | /* Setup write ccws. */ | 284 | /* Setup write ccws. */ |
285 | memset(card->write.ccws, 0, sizeof(struct ccw1) * LCS_NUM_BUFFS + 1); | 285 | memset(card->write.ccws, 0, sizeof(struct ccw1) * (LCS_NUM_BUFFS + 1)); |
286 | for (cnt = 0; cnt < LCS_NUM_BUFFS; cnt++) { | 286 | for (cnt = 0; cnt < LCS_NUM_BUFFS; cnt++) { |
287 | card->write.ccws[cnt].cmd_code = LCS_CCW_WRITE; | 287 | card->write.ccws[cnt].cmd_code = LCS_CCW_WRITE; |
288 | card->write.ccws[cnt].count = 0; | 288 | card->write.ccws[cnt].count = 0; |
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c index cf6da7fafe54..3e25d3150456 100644 --- a/drivers/s390/net/qeth_core_main.c +++ b/drivers/s390/net/qeth_core_main.c | |||
@@ -489,7 +489,7 @@ static struct qeth_reply *qeth_alloc_reply(struct qeth_card *card) | |||
489 | atomic_set(&reply->refcnt, 1); | 489 | atomic_set(&reply->refcnt, 1); |
490 | atomic_set(&reply->received, 0); | 490 | atomic_set(&reply->received, 0); |
491 | reply->card = card; | 491 | reply->card = card; |
492 | }; | 492 | } |
493 | return reply; | 493 | return reply; |
494 | } | 494 | } |
495 | 495 | ||
@@ -1257,7 +1257,30 @@ static void qeth_clean_channel(struct qeth_channel *channel) | |||
1257 | kfree(channel->iob[cnt].data); | 1257 | kfree(channel->iob[cnt].data); |
1258 | } | 1258 | } |
1259 | 1259 | ||
1260 | static void qeth_get_channel_path_desc(struct qeth_card *card) | 1260 | static void qeth_set_single_write_queues(struct qeth_card *card) |
1261 | { | ||
1262 | if ((atomic_read(&card->qdio.state) != QETH_QDIO_UNINITIALIZED) && | ||
1263 | (card->qdio.no_out_queues == 4)) | ||
1264 | qeth_free_qdio_buffers(card); | ||
1265 | |||
1266 | card->qdio.no_out_queues = 1; | ||
1267 | if (card->qdio.default_out_queue != 0) | ||
1268 | dev_info(&card->gdev->dev, "Priority Queueing not supported\n"); | ||
1269 | |||
1270 | card->qdio.default_out_queue = 0; | ||
1271 | } | ||
1272 | |||
1273 | static void qeth_set_multiple_write_queues(struct qeth_card *card) | ||
1274 | { | ||
1275 | if ((atomic_read(&card->qdio.state) != QETH_QDIO_UNINITIALIZED) && | ||
1276 | (card->qdio.no_out_queues == 1)) { | ||
1277 | qeth_free_qdio_buffers(card); | ||
1278 | card->qdio.default_out_queue = 2; | ||
1279 | } | ||
1280 | card->qdio.no_out_queues = 4; | ||
1281 | } | ||
1282 | |||
1283 | static void qeth_update_from_chp_desc(struct qeth_card *card) | ||
1261 | { | 1284 | { |
1262 | struct ccw_device *ccwdev; | 1285 | struct ccw_device *ccwdev; |
1263 | struct channelPath_dsc { | 1286 | struct channelPath_dsc { |
@@ -1274,38 +1297,23 @@ static void qeth_get_channel_path_desc(struct qeth_card *card) | |||
1274 | QETH_DBF_TEXT(SETUP, 2, "chp_desc"); | 1297 | QETH_DBF_TEXT(SETUP, 2, "chp_desc"); |
1275 | 1298 | ||
1276 | ccwdev = card->data.ccwdev; | 1299 | ccwdev = card->data.ccwdev; |
1277 | chp_dsc = (struct channelPath_dsc *)ccw_device_get_chp_desc(ccwdev, 0); | 1300 | chp_dsc = ccw_device_get_chp_desc(ccwdev, 0); |
1278 | if (chp_dsc != NULL) { | 1301 | if (!chp_dsc) |
1279 | if (card->info.type != QETH_CARD_TYPE_IQD) { | 1302 | goto out; |
1280 | /* CHPP field bit 6 == 1 -> single queue */ | 1303 | |
1281 | if ((chp_dsc->chpp & 0x02) == 0x02) { | 1304 | card->info.func_level = 0x4100 + chp_dsc->desc; |
1282 | if ((atomic_read(&card->qdio.state) != | 1305 | if (card->info.type == QETH_CARD_TYPE_IQD) |
1283 | QETH_QDIO_UNINITIALIZED) && | 1306 | goto out; |
1284 | (card->qdio.no_out_queues == 4)) | 1307 | |
1285 | /* change from 4 to 1 outbound queues */ | 1308 | /* CHPP field bit 6 == 1 -> single queue */ |
1286 | qeth_free_qdio_buffers(card); | 1309 | if ((chp_dsc->chpp & 0x02) == 0x02) |
1287 | card->qdio.no_out_queues = 1; | 1310 | qeth_set_single_write_queues(card); |
1288 | if (card->qdio.default_out_queue != 0) | 1311 | else |
1289 | dev_info(&card->gdev->dev, | 1312 | qeth_set_multiple_write_queues(card); |
1290 | "Priority Queueing not supported\n"); | 1313 | out: |
1291 | card->qdio.default_out_queue = 0; | 1314 | kfree(chp_dsc); |
1292 | } else { | ||
1293 | if ((atomic_read(&card->qdio.state) != | ||
1294 | QETH_QDIO_UNINITIALIZED) && | ||
1295 | (card->qdio.no_out_queues == 1)) { | ||
1296 | /* change from 1 to 4 outbound queues */ | ||
1297 | qeth_free_qdio_buffers(card); | ||
1298 | card->qdio.default_out_queue = 2; | ||
1299 | } | ||
1300 | card->qdio.no_out_queues = 4; | ||
1301 | } | ||
1302 | } | ||
1303 | card->info.func_level = 0x4100 + chp_dsc->desc; | ||
1304 | kfree(chp_dsc); | ||
1305 | } | ||
1306 | QETH_DBF_TEXT_(SETUP, 2, "nr:%x", card->qdio.no_out_queues); | 1315 | QETH_DBF_TEXT_(SETUP, 2, "nr:%x", card->qdio.no_out_queues); |
1307 | QETH_DBF_TEXT_(SETUP, 2, "lvl:%02x", card->info.func_level); | 1316 | QETH_DBF_TEXT_(SETUP, 2, "lvl:%02x", card->info.func_level); |
1308 | return; | ||
1309 | } | 1317 | } |
1310 | 1318 | ||
1311 | static void qeth_init_qdio_info(struct qeth_card *card) | 1319 | static void qeth_init_qdio_info(struct qeth_card *card) |
@@ -1473,7 +1481,7 @@ static int qeth_determine_card_type(struct qeth_card *card) | |||
1473 | card->qdio.no_in_queues = 1; | 1481 | card->qdio.no_in_queues = 1; |
1474 | card->info.is_multicast_different = | 1482 | card->info.is_multicast_different = |
1475 | known_devices[i][QETH_MULTICAST_IND]; | 1483 | known_devices[i][QETH_MULTICAST_IND]; |
1476 | qeth_get_channel_path_desc(card); | 1484 | qeth_update_from_chp_desc(card); |
1477 | return 0; | 1485 | return 0; |
1478 | } | 1486 | } |
1479 | i++; | 1487 | i++; |
@@ -2029,7 +2037,7 @@ int qeth_send_control_data(struct qeth_card *card, int len, | |||
2029 | if (time_after(jiffies, timeout)) | 2037 | if (time_after(jiffies, timeout)) |
2030 | goto time_err; | 2038 | goto time_err; |
2031 | cpu_relax(); | 2039 | cpu_relax(); |
2032 | }; | 2040 | } |
2033 | } | 2041 | } |
2034 | 2042 | ||
2035 | if (reply->rc == -EIO) | 2043 | if (reply->rc == -EIO) |
@@ -4735,7 +4743,7 @@ int qeth_core_hardsetup_card(struct qeth_card *card) | |||
4735 | 4743 | ||
4736 | QETH_DBF_TEXT(SETUP, 2, "hrdsetup"); | 4744 | QETH_DBF_TEXT(SETUP, 2, "hrdsetup"); |
4737 | atomic_set(&card->force_alloc_skb, 0); | 4745 | atomic_set(&card->force_alloc_skb, 0); |
4738 | qeth_get_channel_path_desc(card); | 4746 | qeth_update_from_chp_desc(card); |
4739 | retry: | 4747 | retry: |
4740 | if (retries) | 4748 | if (retries) |
4741 | QETH_DBF_MESSAGE(2, "%s Retrying to do IDX activates.\n", | 4749 | QETH_DBF_MESSAGE(2, "%s Retrying to do IDX activates.\n", |
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c index c5f03fa70fba..4cd310cb5bdf 100644 --- a/drivers/s390/net/qeth_l3_main.c +++ b/drivers/s390/net/qeth_l3_main.c | |||
@@ -794,6 +794,7 @@ int qeth_l3_add_vipa(struct qeth_card *card, enum qeth_prot_versions proto, | |||
794 | rc = -EEXIST; | 794 | rc = -EEXIST; |
795 | spin_unlock_irqrestore(&card->ip_lock, flags); | 795 | spin_unlock_irqrestore(&card->ip_lock, flags); |
796 | if (rc) { | 796 | if (rc) { |
797 | kfree(ipaddr); | ||
797 | return rc; | 798 | return rc; |
798 | } | 799 | } |
799 | if (!qeth_l3_add_ip(card, ipaddr)) | 800 | if (!qeth_l3_add_ip(card, ipaddr)) |
@@ -858,6 +859,7 @@ int qeth_l3_add_rxip(struct qeth_card *card, enum qeth_prot_versions proto, | |||
858 | rc = -EEXIST; | 859 | rc = -EEXIST; |
859 | spin_unlock_irqrestore(&card->ip_lock, flags); | 860 | spin_unlock_irqrestore(&card->ip_lock, flags); |
860 | if (rc) { | 861 | if (rc) { |
862 | kfree(ipaddr); | ||
861 | return rc; | 863 | return rc; |
862 | } | 864 | } |
863 | if (!qeth_l3_add_ip(card, ipaddr)) | 865 | if (!qeth_l3_add_ip(card, ipaddr)) |