netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch 0/5] s390: qeth/ctcm patches for 2.6.31
@ 2009-05-20  7:38 frank.blaschka
  2009-05-20  7:38 ` [patch 1/5] [PATCH] qeth: avoid crash after detach of replugged device frank.blaschka
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: frank.blaschka @ 2009-05-20  7:38 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390

Hi Dave,

here are some qeth and ctcm patches for 2.6.31 (net-next).

shortlog:
Klaus-Dieter Wacker (1)
qeth: Clear SBALF15 in any case for output buffers.

Ursula Braun (4)
qeth: avoid crash after detach of replugged device
ctcm: avoid crash in ctcm_remove_device
qeth: support z/VM VSWITCH Port Isolation
qeth: omit upstream checksumming for HiperSockets

Thanks,
        Frank


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

* [patch 1/5] [PATCH] qeth: avoid crash after detach of replugged device
  2009-05-20  7:38 [patch 0/5] s390: qeth/ctcm patches for 2.6.31 frank.blaschka
@ 2009-05-20  7:38 ` frank.blaschka
  2009-05-20  7:38 ` [patch 2/5] [PATCH] ctcm: avoid crash in ctcm_remove_device frank.blaschka
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2009-05-20  7:38 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390, Ursula Braun

[-- Attachment #1: 612-qeth-replug-crash.diff --]
[-- Type: text/plain, Size: 2746 bytes --]

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

If a qeth device is plugged off, setting the device online stops in
state HARDSETUP and a failure is reported to the base cio-layer
causing halt/clear to be invoked. Replugging the device again triggers
a qeth recovery without notification of the cio-layer. If a device
is ungrouped in this state, the qeth set_offline function is not
invoked, because the corresponding ccwgroup device is not in state
ONLINE. Then incoming traffic is still handled by the qdio layer
resulting in a crash in qeth_l<x>_qdio_input_handler, because (part
of) the qeth data structures for this device are already removed.
Solution: After replugging the device qeth recovery should lead to a
working net device. Thus a "LAN offline" result when setting a qeth
device online must not report a failure to the base cio-layer.

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

 drivers/s390/net/qeth_l2_main.c |    4 +++-
 drivers/s390/net/qeth_l3_main.c |    4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff -urpN linux-2.6/drivers/s390/net/qeth_l2_main.c linux-2.6-patched/drivers/s390/net/qeth_l2_main.c
--- linux-2.6/drivers/s390/net/qeth_l2_main.c	2009-05-20 08:56:25.000000000 +0200
+++ linux-2.6-patched/drivers/s390/net/qeth_l2_main.c	2009-05-20 08:56:42.000000000 +0200
@@ -839,6 +839,7 @@ static void qeth_l2_remove_device(struct
 {
 	struct qeth_card *card = dev_get_drvdata(&cgdev->dev);
 
+	qeth_set_allowed_threads(card, 0, 1);
 	wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0);
 
 	if (cgdev->state == CCWGROUP_ONLINE) {
@@ -974,8 +975,9 @@ static int __qeth_l2_set_online(struct c
 			dev_warn(&card->gdev->dev,
 				"The LAN is offline\n");
 			card->lan_online = 0;
+			return 0;
 		}
-		return rc;
+		goto out_remove;
 	} else
 		card->lan_online = 1;
 
diff -urpN linux-2.6/drivers/s390/net/qeth_l3_main.c linux-2.6-patched/drivers/s390/net/qeth_l3_main.c
--- linux-2.6/drivers/s390/net/qeth_l3_main.c	2009-05-20 08:56:25.000000000 +0200
+++ linux-2.6-patched/drivers/s390/net/qeth_l3_main.c	2009-05-20 08:56:42.000000000 +0200
@@ -3070,6 +3070,7 @@ static void qeth_l3_remove_device(struct
 {
 	struct qeth_card *card = dev_get_drvdata(&cgdev->dev);
 
+	qeth_set_allowed_threads(card, 0, 1);
 	wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0);
 
 	if (cgdev->state == CCWGROUP_ONLINE) {
@@ -3141,8 +3142,9 @@ static int __qeth_l3_set_online(struct c
 			dev_warn(&card->gdev->dev,
 				"The LAN is offline\n");
 			card->lan_online = 0;
+			return 0;
 		}
-		return rc;
+		goto out_remove;
 	} else
 		card->lan_online = 1;
 	qeth_set_large_send(card, card->options.large_send);


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

* [patch 2/5] [PATCH] ctcm: avoid crash in ctcm_remove_device
  2009-05-20  7:38 [patch 0/5] s390: qeth/ctcm patches for 2.6.31 frank.blaschka
  2009-05-20  7:38 ` [patch 1/5] [PATCH] qeth: avoid crash after detach of replugged device frank.blaschka
@ 2009-05-20  7:38 ` frank.blaschka
  2009-05-20  7:38 ` [patch 3/5] [PATCH] qeth: support z/VM VSWITCH Port Isolation frank.blaschka
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2009-05-20  7:38 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390, Ursula Braun

[-- Attachment #1: 613-ctcm-remove-crash.diff --]
[-- Type: text/plain, Size: 1163 bytes --]

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

Channels are already removed when setting a ctcm-device offline.
Thus ctcm_remove_device must not refer to channel information.
Solution: delete channel information from the trace call in
ctcm_remove_device.

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

 drivers/s390/net/ctcm_main.c |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff -urpN linux-2.6/drivers/s390/net/ctcm_main.c linux-2.6-patched/drivers/s390/net/ctcm_main.c
--- linux-2.6/drivers/s390/net/ctcm_main.c	2009-05-20 08:56:25.000000000 +0200
+++ linux-2.6-patched/drivers/s390/net/ctcm_main.c	2009-05-20 08:56:42.000000000 +0200
@@ -1677,10 +1677,8 @@ static void ctcm_remove_device(struct cc
 	BUG_ON(priv == NULL);
 
 	CTCM_DBF_TEXT_(SETUP, CTC_DBF_INFO,
-			"removing device %s, r/w = %s/%s, proto : %d",
-			priv->channel[READ]->netdev->name,
-			priv->channel[READ]->id, priv->channel[WRITE]->id,
-			priv->protocol);
+			"removing device %p, proto : %d",
+			cgdev, priv->protocol);
 
 	if (cgdev->state == CCWGROUP_ONLINE)
 		ctcm_shutdown_device(cgdev);


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

* [patch 3/5] [PATCH] qeth: support z/VM VSWITCH Port Isolation
  2009-05-20  7:38 [patch 0/5] s390: qeth/ctcm patches for 2.6.31 frank.blaschka
  2009-05-20  7:38 ` [patch 1/5] [PATCH] qeth: avoid crash after detach of replugged device frank.blaschka
  2009-05-20  7:38 ` [patch 2/5] [PATCH] ctcm: avoid crash in ctcm_remove_device frank.blaschka
@ 2009-05-20  7:38 ` frank.blaschka
  2009-05-20  7:38 ` [patch 4/5] [PATCH] qeth: omit upstream checksumming for HiperSockets frank.blaschka
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2009-05-20  7:38 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390, Ursula Braun

[-- Attachment #1: 614-qeth-port-isolation.diff --]
[-- Type: text/plain, Size: 3912 bytes --]

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

z/VM Virtual Switch Port Isolation allows guests on a VLAN UNAWARE
virtual switch to be isolated from other guests on the VSWITCH.
(See z/VM Apars VM64281 and VM64463).
The Linux qeth driver is affected, because it has to handle new
error codes introduced with the z/VM VSWITCH Port Isolation support.

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_mpc.c |    2 ++
 drivers/s390/net/qeth_core_mpc.h |    2 ++
 drivers/s390/net/qeth_l2_main.c  |   26 +++++++++++++++++++++++++-
 3 files changed, 29 insertions(+), 1 deletion(-)

diff -urpN linux-2.6/drivers/s390/net/qeth_core_mpc.c linux-2.6-patched/drivers/s390/net/qeth_core_mpc.c
--- linux-2.6/drivers/s390/net/qeth_core_mpc.c	2009-03-24 00:12:14.000000000 +0100
+++ linux-2.6-patched/drivers/s390/net/qeth_core_mpc.c	2009-05-20 08:56:42.000000000 +0200
@@ -181,6 +181,8 @@ static struct ipa_rc_msg qeth_ipa_rc_msg
 	{IPA_RC_L2_ADDR_TABLE_FULL,	"Layer2 address table full"},
 	{IPA_RC_L2_DUP_LAYER3_MAC,	"Duplicate with layer 3 MAC"},
 	{IPA_RC_L2_GMAC_NOT_FOUND,	"GMAC not found"},
+	{IPA_RC_L2_MAC_NOT_AUTH_BY_HYP,	"L2 mac not authorized by hypervisor"},
+	{IPA_RC_L2_MAC_NOT_AUTH_BY_ADP,	"L2 mac not authorized by adapter"},
 	{IPA_RC_L2_MAC_NOT_FOUND,	"L2 mac address not found"},
 	{IPA_RC_L2_INVALID_VLAN_ID,	"L2 invalid vlan id"},
 	{IPA_RC_L2_DUP_VLAN_ID,		"L2 duplicate vlan id"},
diff -urpN linux-2.6/drivers/s390/net/qeth_core_mpc.h linux-2.6-patched/drivers/s390/net/qeth_core_mpc.h
--- linux-2.6/drivers/s390/net/qeth_core_mpc.h	2009-03-24 00:12:14.000000000 +0100
+++ linux-2.6-patched/drivers/s390/net/qeth_core_mpc.h	2009-05-20 08:56:42.000000000 +0200
@@ -168,6 +168,8 @@ enum qeth_ipa_return_codes {
 	IPA_RC_L2_ADDR_TABLE_FULL	= 0x2006,
 	IPA_RC_L2_DUP_LAYER3_MAC	= 0x200a,
 	IPA_RC_L2_GMAC_NOT_FOUND	= 0x200b,
+	IPA_RC_L2_MAC_NOT_AUTH_BY_HYP	= 0x200c,
+	IPA_RC_L2_MAC_NOT_AUTH_BY_ADP	= 0x200d,
 	IPA_RC_L2_MAC_NOT_FOUND		= 0x2010,
 	IPA_RC_L2_INVALID_VLAN_ID	= 0x2015,
 	IPA_RC_L2_DUP_VLAN_ID		= 0x2016,
diff -urpN linux-2.6/drivers/s390/net/qeth_l2_main.c linux-2.6-patched/drivers/s390/net/qeth_l2_main.c
--- linux-2.6/drivers/s390/net/qeth_l2_main.c	2009-05-20 08:56:42.000000000 +0200
+++ linux-2.6-patched/drivers/s390/net/qeth_l2_main.c	2009-05-20 08:56:42.000000000 +0200
@@ -130,7 +130,7 @@ static int qeth_l2_send_setgroupmac_cb(s
 	cmd = (struct qeth_ipa_cmd *) data;
 	mac = &cmd->data.setdelmac.mac[0];
 	/* MAC already registered, needed in couple/uncouple case */
-	if (cmd->hdr.return_code == 0x2005) {
+	if (cmd->hdr.return_code ==  IPA_RC_L2_DUP_MAC) {
 		QETH_DBF_MESSAGE(2, "Group MAC %pM already existing on %s \n",
 			  mac, QETH_CARD_IFNAME(card));
 		cmd->hdr.return_code = 0;
@@ -502,6 +502,30 @@ static int qeth_l2_send_setmac_cb(struct
 	if (cmd->hdr.return_code) {
 		QETH_DBF_TEXT_(TRACE, 2, "L2er%x", cmd->hdr.return_code);
 		card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED;
+		switch (cmd->hdr.return_code) {
+		case IPA_RC_L2_DUP_MAC:
+		case IPA_RC_L2_DUP_LAYER3_MAC:
+			dev_warn(&card->gdev->dev,
+				"MAC address "
+				"%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x "
+				"already exists\n",
+				card->dev->dev_addr[0], card->dev->dev_addr[1],
+				card->dev->dev_addr[2], card->dev->dev_addr[3],
+				card->dev->dev_addr[4], card->dev->dev_addr[5]);
+			break;
+		case IPA_RC_L2_MAC_NOT_AUTH_BY_HYP:
+		case IPA_RC_L2_MAC_NOT_AUTH_BY_ADP:
+			dev_warn(&card->gdev->dev,
+				"MAC address "
+				"%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x "
+				"is not authorized\n",
+				card->dev->dev_addr[0], card->dev->dev_addr[1],
+				card->dev->dev_addr[2], card->dev->dev_addr[3],
+				card->dev->dev_addr[4], card->dev->dev_addr[5]);
+			break;
+		default:
+			break;
+		}
 		cmd->hdr.return_code = -EIO;
 	} else {
 		card->info.mac_bits |= QETH_LAYER2_MAC_REGISTERED;


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

* [patch 4/5] [PATCH] qeth: omit upstream checksumming for HiperSockets
  2009-05-20  7:38 [patch 0/5] s390: qeth/ctcm patches for 2.6.31 frank.blaschka
                   ` (2 preceding siblings ...)
  2009-05-20  7:38 ` [patch 3/5] [PATCH] qeth: support z/VM VSWITCH Port Isolation frank.blaschka
@ 2009-05-20  7:38 ` frank.blaschka
  2009-05-20  7:38 ` [patch 5/5] [PATCH] qeth: Clear SBALF15 in any case for output buffers frank.blaschka
  2009-05-21  0:37 ` [patch 0/5] s390: qeth/ctcm patches for 2.6.31 David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2009-05-20  7:38 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390, Ursula Braun

[-- Attachment #1: 615-qeth-checksum-hipersocket.diff --]
[-- Type: text/plain, Size: 2392 bytes --]

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

For HiperSocket devices receive-path checksumming is not required.
Thus NO_CHECKSUMMING is used as default for HiperSocket interfaces.
For layer3 devices configured with NO_CHECKSUMMING received skbs
should have set their ip_summed field to CHECKSUM_UNNECESSARY.

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 |    2 ++
 drivers/s390/net/qeth_l3_main.c   |   20 +++++++++++++-------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff -urpN linux-2.6/drivers/s390/net/qeth_core_main.c linux-2.6-patched/drivers/s390/net/qeth_core_main.c
--- linux-2.6/drivers/s390/net/qeth_core_main.c	2009-05-20 08:56:25.000000000 +0200
+++ linux-2.6-patched/drivers/s390/net/qeth_core_main.c	2009-05-20 08:56:43.000000000 +0200
@@ -1140,6 +1140,8 @@ 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;
diff -urpN linux-2.6/drivers/s390/net/qeth_l3_main.c linux-2.6-patched/drivers/s390/net/qeth_l3_main.c
--- linux-2.6/drivers/s390/net/qeth_l3_main.c	2009-05-20 08:56:42.000000000 +0200
+++ linux-2.6-patched/drivers/s390/net/qeth_l3_main.c	2009-05-20 08:56:43.000000000 +0200
@@ -1920,16 +1920,22 @@ static inline __u16 qeth_l3_rebuild_skb(
 		 hdr->hdr.l3.vlan_id : *((u16 *)&hdr->hdr.l3.dest_addr[12]);
 	}
 
-	skb->ip_summed = card->options.checksum_type;
-	if (card->options.checksum_type == HW_CHECKSUMMING) {
+	switch (card->options.checksum_type) {
+	case SW_CHECKSUMMING:
+		skb->ip_summed = CHECKSUM_NONE;
+		break;
+	case NO_CHECKSUMMING:
+		skb->ip_summed = CHECKSUM_UNNECESSARY;
+		break;
+	case HW_CHECKSUMMING:
 		if ((hdr->hdr.l3.ext_flags &
-		      (QETH_HDR_EXT_CSUM_HDR_REQ |
-		       QETH_HDR_EXT_CSUM_TRANSP_REQ)) ==
-		     (QETH_HDR_EXT_CSUM_HDR_REQ |
-		      QETH_HDR_EXT_CSUM_TRANSP_REQ))
+		    (QETH_HDR_EXT_CSUM_HDR_REQ |
+		     QETH_HDR_EXT_CSUM_TRANSP_REQ)) ==
+		    (QETH_HDR_EXT_CSUM_HDR_REQ |
+		     QETH_HDR_EXT_CSUM_TRANSP_REQ))
 			skb->ip_summed = CHECKSUM_UNNECESSARY;
 		else
-			skb->ip_summed = SW_CHECKSUMMING;
+			skb->ip_summed = CHECKSUM_NONE;
 	}
 
 	return vlan_id;


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

* [patch 5/5] [PATCH] qeth: Clear SBALF15 in any case for output buffers.
  2009-05-20  7:38 [patch 0/5] s390: qeth/ctcm patches for 2.6.31 frank.blaschka
                   ` (3 preceding siblings ...)
  2009-05-20  7:38 ` [patch 4/5] [PATCH] qeth: omit upstream checksumming for HiperSockets frank.blaschka
@ 2009-05-20  7:38 ` frank.blaschka
  2009-05-21  0:37 ` [patch 0/5] s390: qeth/ctcm patches for 2.6.31 David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: frank.blaschka @ 2009-05-20  7:38 UTC (permalink / raw)
  To: davem; +Cc: netdev, linux-s390, Klaus-Dieter Wacker

[-- Attachment #1: 616-qeth-clear-SBALF15.diff --]
[-- Type: text/plain, Size: 957 bytes --]

From: Klaus-Dieter Wacket <kdwacker@de.ibm.com>

Function qeth_clear_output_buffer for HiperSockets may not clear
all 16 SBALEs, but only the used ones. The error flag in SBALF15
has to be cleared in any case.

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

 drivers/s390/net/qeth_core_main.c |    1 +
 1 file changed, 1 insertion(+)

diff -urpN linux-2.6/drivers/s390/net/qeth_core_main.c linux-2.6-patched/drivers/s390/net/qeth_core_main.c
--- linux-2.6/drivers/s390/net/qeth_core_main.c	2009-05-20 08:56:43.000000000 +0200
+++ linux-2.6-patched/drivers/s390/net/qeth_core_main.c	2009-05-20 08:56:43.000000000 +0200
@@ -952,6 +952,7 @@ static void qeth_clear_output_buffer(str
 		buf->buffer->element[i].addr = NULL;
 		buf->buffer->element[i].flags = 0;
 	}
+	buf->buffer->element[15].flags = 0;
 	buf->next_element_to_fill = 0;
 	atomic_set(&buf->state, QETH_QDIO_BUF_EMPTY);
 }


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

* Re: [patch 0/5] s390: qeth/ctcm patches for 2.6.31
  2009-05-20  7:38 [patch 0/5] s390: qeth/ctcm patches for 2.6.31 frank.blaschka
                   ` (4 preceding siblings ...)
  2009-05-20  7:38 ` [patch 5/5] [PATCH] qeth: Clear SBALF15 in any case for output buffers frank.blaschka
@ 2009-05-21  0:37 ` David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2009-05-21  0:37 UTC (permalink / raw)
  To: frank.blaschka; +Cc: netdev, linux-s390

From: frank.blaschka@de.ibm.com
Date: Wed, 20 May 2009 09:38:36 +0200

> shortlog:
> Klaus-Dieter Wacker (1)
> qeth: Clear SBALF15 in any case for output buffers.
> 
> Ursula Braun (4)
> qeth: avoid crash after detach of replugged device
> ctcm: avoid crash in ctcm_remove_device
> qeth: support z/VM VSWITCH Port Isolation
> qeth: omit upstream checksumming for HiperSockets

Applied into net-next-2.6, thanks!

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

end of thread, other threads:[~2009-05-21  0:37 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-20  7:38 [patch 0/5] s390: qeth/ctcm patches for 2.6.31 frank.blaschka
2009-05-20  7:38 ` [patch 1/5] [PATCH] qeth: avoid crash after detach of replugged device frank.blaschka
2009-05-20  7:38 ` [patch 2/5] [PATCH] ctcm: avoid crash in ctcm_remove_device frank.blaschka
2009-05-20  7:38 ` [patch 3/5] [PATCH] qeth: support z/VM VSWITCH Port Isolation frank.blaschka
2009-05-20  7:38 ` [patch 4/5] [PATCH] qeth: omit upstream checksumming for HiperSockets frank.blaschka
2009-05-20  7:38 ` [patch 5/5] [PATCH] qeth: Clear SBALF15 in any case for output buffers frank.blaschka
2009-05-21  0:37 ` [patch 0/5] s390: qeth/ctcm patches for 2.6.31 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).