* [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