netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch 0/5] qeth bug fixes for 2.6.34 next rc
@ 2010-03-09  6:36 frank.blaschka
  2010-03-09  6:36 ` [patch 1/5] [PATCH] qeth: enable kmsg hash processing in qeth_core_sys.c frank.blaschka
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: frank.blaschka @ 2010-03-09  6:36 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390

Hi Dave,

here are some qeth bug fixes for 2.6.34 next rc

shortlog:

Ursula Braun (3)
qeth: enable kmsg hash processing in qeth_core_sys.c
qeth: set promisc off after trace disabling failure
qeth: no recovery after layer mismatch (z/VM NICs)

Frank Blaschka (2)
qeth: l3 send dhcp in non pass thru mode
qeth: change checksumming default for HiperSockets

Thanks,
        Frank

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 1/5] [PATCH] qeth: enable kmsg hash processing in qeth_core_sys.c
  2010-03-09  6:36 [patch 0/5] qeth bug fixes for 2.6.34 next rc frank.blaschka
@ 2010-03-09  6:36 ` frank.blaschka
  2010-03-09  6:36 ` [patch 2/5] [PATCH] qeth: l3 send dhcp in non pass thru mode frank.blaschka
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2010-03-09  6:36 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390, Ursula Braun

[-- Attachment #1: 601-qeth-kmsg.diff --]
[-- Type: text/plain, Size: 654 bytes --]

From: Ursula Braun <ursula.braun@de.ibm.com>

provide qeth kmsg definitions to enable hash string generation for
kernel message created with dev_err().

Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
---

 drivers/s390/net/qeth_core_sys.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/drivers/s390/net/qeth_core_sys.c
+++ b/drivers/s390/net/qeth_core_sys.c
@@ -8,6 +8,9 @@
  *		 Frank Blaschka <frank.blaschka@de.ibm.com>
  */
 
+#define KMSG_COMPONENT "qeth"
+#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
+
 #include <linux/list.h>
 #include <linux/rwsem.h>
 #include <asm/ebcdic.h>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 2/5] [PATCH] qeth: l3 send dhcp in non pass thru mode
  2010-03-09  6:36 [patch 0/5] qeth bug fixes for 2.6.34 next rc frank.blaschka
  2010-03-09  6:36 ` [patch 1/5] [PATCH] qeth: enable kmsg hash processing in qeth_core_sys.c frank.blaschka
@ 2010-03-09  6:36 ` frank.blaschka
  2010-03-09  6:36 ` [patch 3/5] [PATCH] qeth: set promisc off after trace disabling failure frank.blaschka
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2010-03-09  6:36 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390, Martin Schwidefsky

[-- Attachment #1: 602-qeth-dhcp.diff --]
[-- Type: text/plain, Size: 1954 bytes --]

From: Frank Blaschka <frank.blaschka@de.ibm.com>

dhcp frames are valid IPv4 packets so there is no need to send them
in pass thru mode. This allows dhcp packets to pass HiperSockets.
Also the dhcp release frame is send out correctly with this patch.

Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
---

 drivers/s390/net/qeth_core.h    |    3 ++-
 drivers/s390/net/qeth_l3_main.c |   10 ++++------
 2 files changed, 6 insertions(+), 7 deletions(-)

--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@ -763,7 +763,8 @@ static inline int qeth_get_micros(void)
 
 static inline int qeth_get_ip_version(struct sk_buff *skb)
 {
-	switch (skb->protocol) {
+	struct ethhdr *ehdr = (struct ethhdr *)skb->data;
+	switch (ehdr->h_proto) {
 	case ETH_P_IPV6:
 		return 6;
 	case ETH_P_IP:
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -2900,10 +2900,8 @@ static int qeth_l3_hard_start_xmit(struc
 	int data_offset = -1;
 	int nr_frags;
 
-	if ((card->info.type == QETH_CARD_TYPE_IQD) &&
-	    (((skb->protocol != htons(ETH_P_IPV6)) &&
-	      (skb->protocol != htons(ETH_P_IP))) ||
-	     card->options.sniffer))
+	if (((card->info.type == QETH_CARD_TYPE_IQD) && (!ipv)) ||
+	     card->options.sniffer)
 			goto tx_drop;
 
 	if ((card->state != CARD_STATE_UP) || !card->lan_online) {
@@ -2949,14 +2947,14 @@ static int qeth_l3_hard_start_xmit(struc
 		if (data_offset < 0)
 			skb_pull(new_skb, ETH_HLEN);
 	} else {
-		if (new_skb->protocol == htons(ETH_P_IP)) {
+		if (ipv == 4) {
 			if (card->dev->type == ARPHRD_IEEE802_TR)
 				skb_pull(new_skb, TR_HLEN);
 			else
 				skb_pull(new_skb, ETH_HLEN);
 		}
 
-		if (new_skb->protocol == ETH_P_IPV6 && card->vlangrp &&
+		if (ipv == 6 && card->vlangrp &&
 				vlan_tx_tag_present(new_skb)) {
 			skb_push(new_skb, VLAN_HLEN);
 			skb_copy_to_linear_data(new_skb, new_skb->data + 4, 4);


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 3/5] [PATCH] qeth: set promisc off after trace disabling failure
  2010-03-09  6:36 [patch 0/5] qeth bug fixes for 2.6.34 next rc frank.blaschka
  2010-03-09  6:36 ` [patch 1/5] [PATCH] qeth: enable kmsg hash processing in qeth_core_sys.c frank.blaschka
  2010-03-09  6:36 ` [patch 2/5] [PATCH] qeth: l3 send dhcp in non pass thru mode frank.blaschka
@ 2010-03-09  6:36 ` frank.blaschka
  2010-03-09  6:36 ` [patch 4/5] [PATCH] qeth: no recovery after layer mismatch (z/VM NICs) frank.blaschka
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2010-03-09  6:36 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390, Ursula Braun

[-- Attachment #1: 603-qeth-promisc-off.diff --]
[-- Type: text/plain, Size: 2794 bytes --]

From: Ursula Braun <ursula.braun@de.ibm.com>

If HiperSockets Network Traffic Analyzer is switched off, but trace
disabling fails somehow, the qeth driver does not switch off its 
promisc mode status. A following sniffer reactivation fails, since
qeth does not see a need to reenable tracing.
At the same time the code analyzing results of trace commands is
restructured.

Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
---

 drivers/s390/net/qeth_l3_main.c |   56 +++++++++++++++++++++-------------------
 1 file changed, 30 insertions(+), 26 deletions(-)

--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -1691,39 +1691,43 @@ qeth_diags_trace_cb(struct qeth_card *ca
 
 	cmd = (struct qeth_ipa_cmd *)data;
 	rc = cmd->hdr.return_code;
-	if (rc) {
+	if (rc)
 		QETH_DBF_TEXT_(TRACE, 2, "dxter%x", rc);
-		if (cmd->data.diagass.action == QETH_DIAGS_CMD_TRACE_ENABLE) {
-			switch (rc) {
-			case IPA_RC_HARDWARE_AUTH_ERROR:
-				dev_warn(&card->gdev->dev, "The device is not "
-					"authorized to run as a HiperSockets "
-					"network traffic analyzer\n");
-				break;
-			case IPA_RC_TRACE_ALREADY_ACTIVE:
-				dev_warn(&card->gdev->dev, "A HiperSockets "
-					"network traffic analyzer is already "
-					"active in the HiperSockets LAN\n");
-				break;
-			default:
-				break;
-			}
-		}
-		return 0;
-	}
-
 	switch (cmd->data.diagass.action) {
 	case QETH_DIAGS_CMD_TRACE_QUERY:
 		break;
 	case QETH_DIAGS_CMD_TRACE_DISABLE:
-		card->info.promisc_mode = SET_PROMISC_MODE_OFF;
-		dev_info(&card->gdev->dev, "The HiperSockets network traffic "
-			"analyzer is deactivated\n");
+		switch (rc) {
+		case 0:
+		case IPA_RC_INVALID_SUBCMD:
+			card->info.promisc_mode = SET_PROMISC_MODE_OFF;
+			dev_info(&card->gdev->dev, "The HiperSockets network "
+				"traffic analyzer is deactivated\n");
+			break;
+		default:
+			break;
+		}
 		break;
 	case QETH_DIAGS_CMD_TRACE_ENABLE:
-		card->info.promisc_mode = SET_PROMISC_MODE_ON;
-		dev_info(&card->gdev->dev, "The HiperSockets network traffic "
-			"analyzer is activated\n");
+		switch (rc) {
+		case 0:
+			card->info.promisc_mode = SET_PROMISC_MODE_ON;
+			dev_info(&card->gdev->dev, "The HiperSockets network "
+				"traffic analyzer is activated\n");
+			break;
+		case IPA_RC_HARDWARE_AUTH_ERROR:
+			dev_warn(&card->gdev->dev, "The device is not "
+				"authorized to run as a HiperSockets network "
+				"traffic analyzer\n");
+			break;
+		case IPA_RC_TRACE_ALREADY_ACTIVE:
+			dev_warn(&card->gdev->dev, "A HiperSockets "
+				"network traffic analyzer is already "
+				"active in the HiperSockets LAN\n");
+			break;
+		default:
+			break;
+		}
 		break;
 	default:
 		QETH_DBF_MESSAGE(2, "Unknown sniffer action (0x%04x) on %s\n",


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 4/5] [PATCH] qeth: no recovery after layer mismatch (z/VM NICs)
  2010-03-09  6:36 [patch 0/5] qeth bug fixes for 2.6.34 next rc frank.blaschka
                   ` (2 preceding siblings ...)
  2010-03-09  6:36 ` [patch 3/5] [PATCH] qeth: set promisc off after trace disabling failure frank.blaschka
@ 2010-03-09  6:36 ` frank.blaschka
  2010-03-09  6:36 ` [patch 5/5] [PATCH] qeth: change checksumming default for HiperSockets frank.blaschka
  2010-03-10 15:32 ` [patch 0/5] qeth bug fixes for 2.6.34 next rc David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2010-03-09  6:36 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390, Ursula Braun

[-- Attachment #1: 605-qeth-layer-mismatch.diff --]
[-- Type: text/plain, Size: 2885 bytes --]

From: Ursula Braun <ursula.braun@de.ibm.com>

Depending on their definition in z/VM, virtual devices for z/VM 
VSWITCH or GuestLAN must be configured either in layer2 or in
layer3 mode. If qeth detects a layer mismatch, device activation
fails. Trying to recover from this error cannot help; thus
scheduling a recovery should be avoided.
In addition, since recovery is forbidden during online setting of
a qeth device, existence of its network device is guaranteed for all
dev_close() calls in qeth. The corresponding checks can be removed.

Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
---

 drivers/s390/net/qeth_core_main.c |    3 ++-
 drivers/s390/net/qeth_l2_main.c   |   16 ++++++----------
 drivers/s390/net/qeth_l3_main.c   |   16 ++++++----------
 3 files changed, 14 insertions(+), 21 deletions(-)

--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -537,7 +537,8 @@ static void qeth_send_control_data_cb(st
 			dev_err(&card->gdev->dev,
 				"The qeth device is not configured "
 				"for the OSI layer required by z/VM\n");
-		qeth_schedule_recovery(card);
+		else
+			qeth_schedule_recovery(card);
 		goto out;
 	}
 
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -1071,11 +1071,9 @@ static int qeth_l2_recover(void *ptr)
 		dev_info(&card->gdev->dev,
 			"Device successfully recovered!\n");
 	else {
-		if (card->dev) {
-			rtnl_lock();
-			dev_close(card->dev);
-			rtnl_unlock();
-		}
+		rtnl_lock();
+		dev_close(card->dev);
+		rtnl_unlock();
 		dev_warn(&card->gdev->dev, "The qeth device driver "
 			"failed to recover an error on the device\n");
 	}
@@ -1129,11 +1127,9 @@ static int qeth_l2_pm_resume(struct ccwg
 	if (card->state == CARD_STATE_RECOVER) {
 		rc = __qeth_l2_set_online(card->gdev, 1);
 		if (rc) {
-			if (card->dev) {
-				rtnl_lock();
-				dev_close(card->dev);
-				rtnl_unlock();
-			}
+			rtnl_lock();
+			dev_close(card->dev);
+			rtnl_unlock();
 		}
 	} else
 		rc = __qeth_l2_set_online(card->gdev, 0);
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -2219,11 +2219,9 @@ static int qeth_l3_stop_card(struct qeth
 		if (recovery_mode)
 			qeth_l3_stop(card->dev);
 		else {
-			if (card->dev) {
-				rtnl_lock();
-				dev_close(card->dev);
-				rtnl_unlock();
-			}
+			rtnl_lock();
+			dev_close(card->dev);
+			rtnl_unlock();
 		}
 		if (!card->use_hard_stop) {
 			rc = qeth_send_stoplan(card);
@@ -3536,11 +3534,9 @@ static int qeth_l3_pm_resume(struct ccwg
 	if (card->state == CARD_STATE_RECOVER) {
 		rc = __qeth_l3_set_online(card->gdev, 1);
 		if (rc) {
-			if (card->dev) {
-				rtnl_lock();
-				dev_close(card->dev);
-				rtnl_unlock();
-			}
+			rtnl_lock();
+			dev_close(card->dev);
+			rtnl_unlock();
 		}
 	} else
 		rc = __qeth_l3_set_online(card->gdev, 0);


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 5/5] [PATCH] qeth: change checksumming default for HiperSockets
  2010-03-09  6:36 [patch 0/5] qeth bug fixes for 2.6.34 next rc frank.blaschka
                   ` (3 preceding siblings ...)
  2010-03-09  6:36 ` [patch 4/5] [PATCH] qeth: no recovery after layer mismatch (z/VM NICs) frank.blaschka
@ 2010-03-09  6:36 ` frank.blaschka
  2010-03-10 15:32 ` [patch 0/5] qeth bug fixes for 2.6.34 next rc David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2010-03-09  6:36 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390

[-- Attachment #1: 606-qeth-checksum-default.diff --]
[-- Type: text/plain, Size: 801 bytes --]

From: Frank Blaschka <frank.blaschka@de.ibm.com>

Deactivate inbound checksumming on HiperSocket is a valid but
dangerous optimization in case the frame is routed from an OSA
network to an HiperSockets network. To go for sure we change the
default to software checksumming.

Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
---

 drivers/s390/net/qeth_core_main.c |    2 --
 1 file changed, 2 deletions(-)

--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -1114,8 +1114,6 @@ static int qeth_setup_card(struct qeth_c
 	card->ipato.enabled = 0;
 	card->ipato.invert4 = 0;
 	card->ipato.invert6 = 0;
-	if (card->info.type == QETH_CARD_TYPE_IQD)
-		card->options.checksum_type = NO_CHECKSUMMING;
 	/* init QDIO stuff */
 	qeth_init_qdio_info(card);
 	return 0;


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [patch 0/5] qeth bug fixes for 2.6.34 next rc
  2010-03-09  6:36 [patch 0/5] qeth bug fixes for 2.6.34 next rc frank.blaschka
                   ` (4 preceding siblings ...)
  2010-03-09  6:36 ` [patch 5/5] [PATCH] qeth: change checksumming default for HiperSockets frank.blaschka
@ 2010-03-10 15:32 ` David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2010-03-10 15:32 UTC (permalink / raw)
  To: frank.blaschka; +Cc: netdev, linux-s390

From: frank.blaschka@de.ibm.com
Date: Tue, 09 Mar 2010 07:36:52 +0100

> here are some qeth bug fixes for 2.6.34 next rc

All applied, thanks.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-03-10 15:32 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-09  6:36 [patch 0/5] qeth bug fixes for 2.6.34 next rc frank.blaschka
2010-03-09  6:36 ` [patch 1/5] [PATCH] qeth: enable kmsg hash processing in qeth_core_sys.c frank.blaschka
2010-03-09  6:36 ` [patch 2/5] [PATCH] qeth: l3 send dhcp in non pass thru mode frank.blaschka
2010-03-09  6:36 ` [patch 3/5] [PATCH] qeth: set promisc off after trace disabling failure frank.blaschka
2010-03-09  6:36 ` [patch 4/5] [PATCH] qeth: no recovery after layer mismatch (z/VM NICs) frank.blaschka
2010-03-09  6:36 ` [patch 5/5] [PATCH] qeth: change checksumming default for HiperSockets frank.blaschka
2010-03-10 15:32 ` [patch 0/5] qeth bug fixes for 2.6.34 next rc David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).