summaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-02 16:38:27 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-02 16:38:27 -0400
commitaecdc33e111b2c447b622e287c6003726daa1426 (patch)
tree3e7657eae4b785e1a1fb5dfb225dbae0b2f0cfc6 /drivers/s390
parenta20acf99f75e49271381d65db097c9763060a1e8 (diff)
parenta3a6cab5ea10cca64d036851fe0d932448f2fe4f (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Pull networking changes from David Miller: 1) GRE now works over ipv6, from Dmitry Kozlov. 2) Make SCTP more network namespace aware, from Eric Biederman. 3) TEAM driver now works with non-ethernet devices, from Jiri Pirko. 4) Make openvswitch network namespace aware, from Pravin B Shelar. 5) IPV6 NAT implementation, from Patrick McHardy. 6) Server side support for TCP Fast Open, from Jerry Chu and others. 7) Packet BPF filter supports MOD and XOR, from Eric Dumazet and Daniel Borkmann. 8) Increate the loopback default MTU to 64K, from Eric Dumazet. 9) Use a per-task rather than per-socket page fragment allocator for outgoing networking traffic. This benefits processes that have very many mostly idle sockets, which is quite common. From Eric Dumazet. 10) Use up to 32K for page fragment allocations, with fallbacks to smaller sizes when higher order page allocations fail. Benefits are a) less segments for driver to process b) less calls to page allocator c) less waste of space. From Eric Dumazet. 11) Allow GRO to be used on GRE tunnels, from Eric Dumazet. 12) VXLAN device driver, one way to handle VLAN issues such as the limitation of 4096 VLAN IDs yet still have some level of isolation. From Stephen Hemminger. 13) As usual there is a large boatload of driver changes, with the scale perhaps tilted towards the wireless side this time around. Fix up various fairly trivial conflicts, mostly caused by the user namespace changes. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1012 commits) hyperv: Add buffer for extended info after the RNDIS response message. hyperv: Report actual status in receive completion packet hyperv: Remove extra allocated space for recv_pkt_list elements hyperv: Fix page buffer handling in rndis_filter_send_request() hyperv: Fix the missing return value in rndis_filter_set_packet_filter() hyperv: Fix the max_xfer_size in RNDIS initialization vxlan: put UDP socket in correct namespace vxlan: Depend on CONFIG_INET sfc: Fix the reported priorities of different filter types sfc: Remove EFX_FILTER_FLAG_RX_OVERRIDE_IP sfc: Fix loopback self-test with separate_tx_channels=1 sfc: Fix MCDI structure field lookup sfc: Add parentheses around use of bitfield macro arguments sfc: Fix null function pointer in efx_sriov_channel_type vxlan: virtual extensible lan igmp: export symbol ip_mc_leave_group netlink: add attributes to fdb interface tg3: unconditionally select HWMON support when tg3 is enabled. Revert "net: ti cpsw ethernet: allow reading phy interface mode from DT" gre: fix sparse warning ...
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/net/ctcm_fsms.c2
-rw-r--r--drivers/s390/net/ctcm_main.c2
-rw-r--r--drivers/s390/net/lcs.c2
-rw-r--r--drivers/s390/net/qeth_core_main.c78
-rw-r--r--drivers/s390/net/qeth_l3_main.c2
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
1260static void qeth_get_channel_path_desc(struct qeth_card *card) 1260static 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
1273static 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
1283static 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"); 1313out:
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
1311static void qeth_init_qdio_info(struct qeth_card *card) 1319static 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);
4739retry: 4747retry:
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))