Hi Dave,
here are several fixes for the s390 qeth driver, built for net.
Thanks,
Ursula
Hans Wippel (1):
qeth: restore device features after recovery
Thomas Richter (1):
s390/qeth: fix setting VIPA address
Ursula Braun (5):
s390/qeth: use ip_lock for hsuid configuration
s390/qeth: allow hsuid configuration in DOWN state
qeth: check not more than 16 SBALEs on the completion queue
qeth: do not limit number of gso segments
qeth: do not turn on SG per default
drivers/s390/net/qeth_core.h | 1 +
drivers/s390/net/qeth_core_main.c | 32 +++++++++++++++++++++++++++++++-
drivers/s390/net/qeth_l2_main.c | 6 +++---
drivers/s390/net/qeth_l3_main.c | 29 ++++++++++++++++++++---------
drivers/s390/net/qeth_l3_sys.c | 5 +++++
5 files changed, 60 insertions(+), 13 deletions(-)
--
2.8.4
The qeth IP address mapping logic has been reworked recently. It
causes now problems to specify qeth sysfs attribute "hsuid" in DOWN
state, which is allowed. Postpone registering or deregistering of
IP-addresses in this case.
Signed-off-by: Ursula Braun <redacted>
Reviewed-by: Thomas Richter <redacted>
---
drivers/s390/net/qeth_l3_main.c | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
@@ -296,6 +301,11 @@ int qeth_l3_add_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)hash_add(card->ip_htable,&addr->hnode,qeth_l3_ipaddr_hash(addr));+if(!qeth_card_hw_is_reachable(card)){+addr->disp_flag=QETH_DISP_ADDR_ADD;+return0;+}+/* qeth_l3_register_addr_entry can go to sleep*ifweaddaIPV4addr.Itiscausedbythereason*thatSETIPipacmdstartsARPstaffforIPV4addr.
From: Hans Wippel <redacted>
After device recovery, only a basic set of network device features is
enabled on the device. If features like checksum offloading or TSO were
enabled by the user before the recovery, this results in a mismatch
between the network device features, that the kernel assumes to be
enabled on the device, and the features actually enabled on the device.
This patch tries to restore previously set features, that require
changes on the device, after the recovery of a device. In case of an
error, the network device's features are changed to contain only the
features that are actually turned on.
Signed-off-by: Hans Wippel <redacted>
Signed-off-by: Ursula Braun <redacted>
---
drivers/s390/net/qeth_core.h | 1 +
drivers/s390/net/qeth_core_main.c | 29 +++++++++++++++++++++++++++++
drivers/s390/net/qeth_l2_main.c | 3 +++
drivers/s390/net/qeth_l3_main.c | 1 +
4 files changed, 34 insertions(+)
@@ -6131,6 +6131,35 @@ static int qeth_set_ipa_tso(struct qeth_card *card, int on)returnrc;}+/* try to restore device features on a device after recovery */+intqeth_recover_features(structnet_device*dev)+{+structqeth_card*card=dev->ml_priv;+netdev_features_trecover=dev->features;++if(recover&NETIF_F_IP_CSUM){+if(qeth_set_ipa_csum(card,1,IPA_OUTBOUND_CHECKSUM))+recover^=NETIF_F_IP_CSUM;+}+if(recover&NETIF_F_RXCSUM){+if(qeth_set_ipa_csum(card,1,IPA_INBOUND_CHECKSUM))+recover^=NETIF_F_RXCSUM;+}+if(recover&NETIF_F_TSO){+if(qeth_set_ipa_tso(card,1))+recover^=NETIF_F_TSO;+}++if(recover==dev->features)+return0;++dev_warn(&card->gdev->dev,+"Device recovery failed to restore all offload features\n");+dev->features=recover;+return-EIO;+}+EXPORT_SYMBOL_GPL(qeth_recover_features);+intqeth_set_features(structnet_device*dev,netdev_features_tfeatures){structqeth_card*card=dev->ml_priv;
@@ -1246,6 +1246,9 @@ contin:}/* this also sets saved unicast addresses */qeth_l2_set_rx_mode(card->dev);+rtnl_lock();+qeth_recover_features(card->dev);+rtnl_unlock();}/* let user_space know that device is online */kobject_uevent(&gdev->dev.kobj,KOBJ_CHANGE);
To reduce the need of skb_linearize() calls, gso_max_segs of qeth
net_devices had been limited according to the maximum number of qdio SBAL
elements. But a gso segment cannot be larger than the mtu-size, while an
SBAL element can contain up to 4096 bytes. The gso_max_segs limitation
limits the maximum packet size given to the qeth driver. Performance
measurements with tso-enabled qeth network interfaces and mtu-size 1500
showed, that the disadvantage of smaller packets is much more severe than
the advantage of fewer skb_linearize() calls.
This patch gets rid of the gso_max_segs limitations in the qeth driver.
Signed-off-by: Ursula Braun <redacted>
Reviewed-by: Thomas Richter <redacted>
---
drivers/s390/net/qeth_l2_main.c | 1 -
drivers/s390/net/qeth_l3_main.c | 1 -
2 files changed, 2 deletions(-)
According to recent performance measurements, turning on net_device
feature NETIF_F_SG only behaves well, but turning on feature
NETIF_F_GSO shows bad results. Since the kernel activates NETIF_F_GSO
automatically as soon as the driver configures feature NETIF_F_SG, qeth
should not activate feature NETIF_F_SG per default, until the qeth
problems with NETIF_F_GSO are solved.
Signed-off-by: Ursula Braun <redacted>
Reviewed-by: Thomas Richter <redacted>
---
drivers/s390/net/qeth_l2_main.c | 2 --
drivers/s390/net/qeth_l3_main.c | 1 -
2 files changed, 3 deletions(-)
@@ -1124,8 +1124,6 @@ static int qeth_l2_setup_netdev(struct qeth_card *card)card->dev->hw_features|=NETIF_F_RXCSUM;card->dev->vlan_features|=NETIF_F_RXCSUM;}-/* Turn on SG per default */-card->dev->features|=NETIF_F_SG;}card->info.broadcast_capable=1;qeth_l2_request_initial_mac(card);
From: Thomas Richter <redacted>
commit 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback")
restructured the internal address handling.
This work broke setting a virtual IP address.
The command
echo 10.1.1.1 > /sys/bus/ccwgroup/devices/<device>/vipa/add4
fails with file exist error even if the IP address has not
been set before.
It turned out that the search result for the IP address
search is handled incorrectly in the VIPA case.
This patch fixes the setting of an virtual IP address.
Signed-off-by: Thomas Richter <redacted>
Signed-off-by: Ursula Braun <redacted>
---
drivers/s390/net/qeth_l3_main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)