netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ursula Braun <ubraun@linux.vnet.ibm.com>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org, linux-s390@vger.kernel.org,
	schwidefsky@de.ibm.com, heiko.carstens@de.ibm.com,
	utz.bacher@de.ibm.com
Subject: [PATCH net-next 11/13] qeth: improve set_features error handling
Date: Thu, 16 Jun 2016 16:19:01 +0200	[thread overview]
Message-ID: <1466086743-55484-12-git-send-email-ubraun@linux.vnet.ibm.com> (raw)
In-Reply-To: <1466086743-55484-1-git-send-email-ubraun@linux.vnet.ibm.com>

From: Hans Wippel <hwippel@linux.vnet.ibm.com>

The function set_features is called to configure network device features
on the hardware. If errors occur, the network device features should
reflect the changed hardware state and the function should return an
error in order to notify the user.

In case of an error, the current implementation does not necessarily
save the changed hardware state in the network device features before an
error is returned.

This patch improves error handling by saving features, that could be
changed, to the network device features before returning an error. If
the device is not running, an additional check in fix_features removes
features, that require hardware changes, before they are passed to
set_features. Thus, the corresponding check was removed in set_features.

Signed-off-by: Hans Wippel <hwippel@linux.vnet.ibm.com>
Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
---
 drivers/s390/net/qeth_core_main.c | 38 +++++++++++++++++++++++++++-----------
 1 file changed, 27 insertions(+), 11 deletions(-)

diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index 19a6ee0..44d3200 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -6125,27 +6125,38 @@ static int qeth_set_ipa_tso(struct qeth_card *card, int on)
 int qeth_set_features(struct net_device *dev, netdev_features_t features)
 {
 	struct qeth_card *card = dev->ml_priv;
-	netdev_features_t changed = card->dev->features ^ features;
+	netdev_features_t changed = dev->features ^ features;
 	int rc = 0;
 
 	QETH_DBF_TEXT(SETUP, 2, "setfeat");
 	QETH_DBF_HEX(SETUP, 2, &features, sizeof(features));
 
-	if (card->state == CARD_STATE_DOWN ||
-	    card->state == CARD_STATE_RECOVER)
-		return 0;
-
-	if ((changed & NETIF_F_IP_CSUM))
+	if ((changed & NETIF_F_IP_CSUM)) {
 		rc = qeth_set_ipa_csum(card,
 				       features & NETIF_F_IP_CSUM ? 1 : 0,
 				       IPA_OUTBOUND_CHECKSUM);
-	if ((changed & NETIF_F_RXCSUM))
-		rc |= qeth_set_ipa_csum(card,
+		if (rc)
+			changed ^= NETIF_F_IP_CSUM;
+	}
+	if ((changed & NETIF_F_RXCSUM)) {
+		rc = qeth_set_ipa_csum(card,
 					features & NETIF_F_RXCSUM ? 1 : 0,
 					IPA_INBOUND_CHECKSUM);
-	if ((changed & NETIF_F_TSO))
-		rc |= qeth_set_ipa_tso(card, features & NETIF_F_TSO ? 1 : 0);
-	return rc ? -EIO : 0;
+		if (rc)
+			changed ^= NETIF_F_RXCSUM;
+	}
+	if ((changed & NETIF_F_TSO)) {
+		rc = qeth_set_ipa_tso(card, features & NETIF_F_TSO ? 1 : 0);
+		if (rc)
+			changed ^= NETIF_F_TSO;
+	}
+
+	/* everything changed successfully? */
+	if ((dev->features ^ features) == changed)
+		return 0;
+	/* something went wrong. save changed features and return error */
+	dev->features ^= changed;
+	return -EIO;
 }
 EXPORT_SYMBOL_GPL(qeth_set_features);
 
@@ -6164,6 +6175,11 @@ netdev_features_t qeth_fix_features(struct net_device *dev,
 		dev_info(&card->gdev->dev, "Outbound TSO not supported on %s\n",
 			 QETH_CARD_IFNAME(card));
 	}
+	/* if the card isn't up, remove features that require hw changes */
+	if (card->state == CARD_STATE_DOWN ||
+	    card->state == CARD_STATE_RECOVER)
+		features = features & ~(NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
+					NETIF_F_TSO);
 	QETH_DBF_HEX(SETUP, 2, &features, sizeof(features));
 	return features;
 }
-- 
2.6.6

  parent reply	other threads:[~2016-06-16 14:19 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-16 14:18 [PATCH net-next 00/13] s390: qeth patches Ursula Braun
2016-06-16 14:18 ` [PATCH net-next 01/13] qeth: Include error message for "OS Mismatch" Ursula Braun
2016-06-16 14:18 ` [PATCH net-next 02/13] qeth: refactor calculation of SBALE count Ursula Braun
2016-06-16 14:18 ` [PATCH net-next 03/13] qeth: clean up condition when tso is used Ursula Braun
2016-06-16 14:18 ` [PATCH net-next 04/13] qeth: fill netdevice->gso_* attributes accurately Ursula Braun
2016-06-16 14:18 ` [PATCH net-next 05/13] qeth: enable scatter/gather in layer 2 mode Ursula Braun
2016-06-16 14:18 ` [PATCH net-next 06/13] qeth: enable scatter/gather by default Ursula Braun
2016-06-16 14:18 ` [PATCH net-next 07/13] qeth: introduce linearization fail count to stats Ursula Braun
2016-06-16 14:18 ` [PATCH net-next 08/13] qeth: optimize IP handling in rx_mode callback Ursula Braun
2016-06-16 14:18 ` [PATCH net-next 09/13] qeth layer 2 and layer 3 common feature handling Ursula Braun
2016-06-16 14:19 ` [PATCH net-next 10/13] qeth: add network device features for VLAN devices Ursula Braun
2016-06-16 14:19 ` Ursula Braun [this message]
2016-06-16 14:19 ` [PATCH net-next 12/13] qeth: omit outbound queue 3 for unicast packets in Priority Queuing on HiperSockets Ursula Braun
2016-06-16 14:19 ` [PATCH net-next 13/13] s390/qeth: fix indentation in qeth_l3_arp_query Ursula Braun
2016-06-17  5:16 ` [PATCH net-next 00/13] s390: qeth patches David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1466086743-55484-12-git-send-email-ubraun@linux.vnet.ibm.com \
    --to=ubraun@linux.vnet.ibm.com \
    --cc=davem@davemloft.net \
    --cc=heiko.carstens@de.ibm.com \
    --cc=linux-s390@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=schwidefsky@de.ibm.com \
    --cc=utz.bacher@de.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).