* [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: 2745 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: 1162 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: 3911 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: 2391 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: 956 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.