* [patch 0/3] s390: network bug fixes for net
@ 2013-03-19 6:04 frank.blaschka
2013-03-19 6:04 ` [patch 1/3] qeth: delay feature trace frank.blaschka
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: frank.blaschka @ 2013-03-19 6:04 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390
Hi Dave,
here are 3 bug fixes for net.
shortlog:
Stefan Raspl (2)
qeth: delay feature trace
qeth: Fix invalid router settings handling
Frank Blaschka (1)
qeth: Fix scatter-gather regression
Thanks,
Frank
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 1/3] qeth: delay feature trace
2013-03-19 6:04 [patch 0/3] s390: network bug fixes for net frank.blaschka
@ 2013-03-19 6:04 ` frank.blaschka
2013-03-19 6:04 ` [patch 2/3] qeth: Fix invalid router settings handling frank.blaschka
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: frank.blaschka @ 2013-03-19 6:04 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390, Stefan Raspl
[-- Attachment #1: 600-qeth-delay-trace.diff --]
[-- Type: text/plain, Size: 874 bytes --]
From: Stefan Raspl <raspl@linux.vnet.ibm.com>
Delay tracing of the card features until the optional commands have been
enabled.
Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
Signed-off-by: Frank Blaschka <blaschka@linux.vnet.ibm.com>
---
drivers/s390/net/qeth_l3_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -3348,7 +3348,6 @@ static int __qeth_l3_set_online(struct c
rc = -ENODEV;
goto out_remove;
}
- qeth_trace_features(card);
if (!card->dev && qeth_l3_setup_netdev(card)) {
rc = -ENODEV;
@@ -3425,6 +3424,7 @@ contin:
qeth_l3_set_multicast_list(card->dev);
rtnl_unlock();
}
+ qeth_trace_features(card);
/* let user_space know that device is online */
kobject_uevent(&gdev->dev.kobj, KOBJ_CHANGE);
mutex_unlock(&card->conf_mutex);
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 2/3] qeth: Fix invalid router settings handling
2013-03-19 6:04 [patch 0/3] s390: network bug fixes for net frank.blaschka
2013-03-19 6:04 ` [patch 1/3] qeth: delay feature trace frank.blaschka
@ 2013-03-19 6:04 ` frank.blaschka
2013-03-19 6:04 ` [patch 3/3] qeth: Fix scatter-gather regression frank.blaschka
2013-03-19 14:10 ` [patch 0/3] s390: network bug fixes for net David Miller
3 siblings, 0 replies; 5+ messages in thread
From: frank.blaschka @ 2013-03-19 6:04 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390, Stefan Raspl
[-- Attachment #1: 601-qeth-router-setting.diff --]
[-- Type: text/plain, Size: 2643 bytes --]
From: Stefan Raspl <raspl@linux.vnet.ibm.com>
Give a bad return code when specifying a router setting that is either
invalid or not support on the respective device type. In addition, fall back
the previous setting instead of silently switching back to 'no routing'.
Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
Signed-off-by: Frank Blaschka <blaschka@linux.vnet.ibm.com>
---
drivers/s390/net/qeth_l3_main.c | 17 +++++++++++------
drivers/s390/net/qeth_l3_sys.c | 2 ++
2 files changed, 13 insertions(+), 6 deletions(-)
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -623,7 +623,7 @@ static int qeth_l3_send_setrouting(struc
return rc;
}
-static void qeth_l3_correct_routing_type(struct qeth_card *card,
+static int qeth_l3_correct_routing_type(struct qeth_card *card,
enum qeth_routing_types *type, enum qeth_prot_versions prot)
{
if (card->info.type == QETH_CARD_TYPE_IQD) {
@@ -632,7 +632,7 @@ static void qeth_l3_correct_routing_type
case PRIMARY_CONNECTOR:
case SECONDARY_CONNECTOR:
case MULTICAST_ROUTER:
- return;
+ return 0;
default:
goto out_inval;
}
@@ -641,17 +641,18 @@ static void qeth_l3_correct_routing_type
case NO_ROUTER:
case PRIMARY_ROUTER:
case SECONDARY_ROUTER:
- return;
+ return 0;
case MULTICAST_ROUTER:
if (qeth_is_ipafunc_supported(card, prot,
IPA_OSA_MC_ROUTER))
- return;
+ return 0;
default:
goto out_inval;
}
}
out_inval:
*type = NO_ROUTER;
+ return -EINVAL;
}
int qeth_l3_setrouting_v4(struct qeth_card *card)
@@ -660,8 +661,10 @@ int qeth_l3_setrouting_v4(struct qeth_ca
QETH_CARD_TEXT(card, 3, "setrtg4");
- qeth_l3_correct_routing_type(card, &card->options.route4.type,
+ rc = qeth_l3_correct_routing_type(card, &card->options.route4.type,
QETH_PROT_IPV4);
+ if (rc)
+ return rc;
rc = qeth_l3_send_setrouting(card, card->options.route4.type,
QETH_PROT_IPV4);
@@ -683,8 +686,10 @@ int qeth_l3_setrouting_v6(struct qeth_ca
if (!qeth_is_supported(card, IPA_IPV6))
return 0;
- qeth_l3_correct_routing_type(card, &card->options.route6.type,
+ rc = qeth_l3_correct_routing_type(card, &card->options.route6.type,
QETH_PROT_IPV6);
+ if (rc)
+ return rc;
rc = qeth_l3_send_setrouting(card, card->options.route6.type,
QETH_PROT_IPV6);
--- a/drivers/s390/net/qeth_l3_sys.c
+++ b/drivers/s390/net/qeth_l3_sys.c
@@ -87,6 +87,8 @@ static ssize_t qeth_l3_dev_route_store(s
rc = qeth_l3_setrouting_v6(card);
}
out:
+ if (rc)
+ route->type = old_route_type;
mutex_unlock(&card->conf_mutex);
return rc ? rc : count;
}
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 3/3] qeth: Fix scatter-gather regression
2013-03-19 6:04 [patch 0/3] s390: network bug fixes for net frank.blaschka
2013-03-19 6:04 ` [patch 1/3] qeth: delay feature trace frank.blaschka
2013-03-19 6:04 ` [patch 2/3] qeth: Fix invalid router settings handling frank.blaschka
@ 2013-03-19 6:04 ` frank.blaschka
2013-03-19 14:10 ` [patch 0/3] s390: network bug fixes for net David Miller
3 siblings, 0 replies; 5+ messages in thread
From: frank.blaschka @ 2013-03-19 6:04 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390
[-- Attachment #1: 603-qeth-scatter-gather.diff --]
[-- Type: text/plain, Size: 3723 bytes --]
From: Frank Blaschka <blaschka@linux.vnet.ibm.com>
This patch fixes a scatter-gather regression introduced with
commit 5640f768 net: use a per task frag allocator
Now the qeth driver can cope with bigger framents and split a fragment in
sub framents if required.
Signed-off-by: Frank Blaschka <blaschka@linux.vnet.ibm.com>
---
drivers/s390/net/qeth_core.h | 1
drivers/s390/net/qeth_core_main.c | 45 ++++++++++++++++++++++++++++++++------
drivers/s390/net/qeth_l3_main.c | 4 ++-
3 files changed, 42 insertions(+), 8 deletions(-)
--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@ -916,6 +916,7 @@ int qeth_send_control_data(struct qeth_c
void *reply_param);
int qeth_get_priority_queue(struct qeth_card *, struct sk_buff *, int, int);
int qeth_get_elements_no(struct qeth_card *, void *, struct sk_buff *, int);
+int qeth_get_elements_for_frags(struct sk_buff *);
int qeth_do_send_packet_fast(struct qeth_card *, struct qeth_qdio_out_q *,
struct sk_buff *, struct qeth_hdr *, int, int, int);
int qeth_do_send_packet(struct qeth_card *, struct qeth_qdio_out_q *,
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -3679,6 +3679,25 @@ int qeth_get_priority_queue(struct qeth_
}
EXPORT_SYMBOL_GPL(qeth_get_priority_queue);
+int qeth_get_elements_for_frags(struct sk_buff *skb)
+{
+ int cnt, length, e, elements = 0;
+ struct skb_frag_struct *frag;
+ char *data;
+
+ for (cnt = 0; cnt < skb_shinfo(skb)->nr_frags; cnt++) {
+ frag = &skb_shinfo(skb)->frags[cnt];
+ data = (char *)page_to_phys(skb_frag_page(frag)) +
+ frag->page_offset;
+ length = frag->size;
+ e = PFN_UP((unsigned long)data + length - 1) -
+ PFN_DOWN((unsigned long)data);
+ elements += e;
+ }
+ return elements;
+}
+EXPORT_SYMBOL_GPL(qeth_get_elements_for_frags);
+
int qeth_get_elements_no(struct qeth_card *card, void *hdr,
struct sk_buff *skb, int elems)
{
@@ -3686,7 +3705,8 @@ int qeth_get_elements_no(struct qeth_car
int elements_needed = PFN_UP((unsigned long)skb->data + dlen - 1) -
PFN_DOWN((unsigned long)skb->data);
- elements_needed += skb_shinfo(skb)->nr_frags;
+ elements_needed += qeth_get_elements_for_frags(skb);
+
if ((elements_needed + elems) > QETH_MAX_BUFFER_ELEMENTS(card)) {
QETH_DBF_MESSAGE(2, "Invalid size of IP packet "
"(Number=%d / Length=%d). Discarded.\n",
@@ -3771,12 +3791,23 @@ static inline void __qeth_fill_buffer(st
for (cnt = 0; cnt < skb_shinfo(skb)->nr_frags; cnt++) {
frag = &skb_shinfo(skb)->frags[cnt];
- buffer->element[element].addr = (char *)
- page_to_phys(skb_frag_page(frag))
- + frag->page_offset;
- buffer->element[element].length = frag->size;
- buffer->element[element].eflags = SBAL_EFLAGS_MIDDLE_FRAG;
- element++;
+ data = (char *)page_to_phys(skb_frag_page(frag)) +
+ frag->page_offset;
+ length = frag->size;
+ while (length > 0) {
+ length_here = PAGE_SIZE -
+ ((unsigned long) data % PAGE_SIZE);
+ if (length < length_here)
+ length_here = length;
+
+ buffer->element[element].addr = data;
+ buffer->element[element].length = length_here;
+ buffer->element[element].eflags =
+ SBAL_EFLAGS_MIDDLE_FRAG;
+ length -= length_here;
+ data += length_here;
+ element++;
+ }
}
if (buffer->element[element - 1].eflags)
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -2903,7 +2903,9 @@ static inline int qeth_l3_tso_elements(s
tcp_hdr(skb)->doff * 4;
int tcpd_len = skb->len - (tcpd - (unsigned long)skb->data);
int elements = PFN_UP(tcpd + tcpd_len - 1) - PFN_DOWN(tcpd);
- elements += skb_shinfo(skb)->nr_frags;
+
+ elements += qeth_get_elements_for_frags(skb);
+
return elements;
}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch 0/3] s390: network bug fixes for net
2013-03-19 6:04 [patch 0/3] s390: network bug fixes for net frank.blaschka
` (2 preceding siblings ...)
2013-03-19 6:04 ` [patch 3/3] qeth: Fix scatter-gather regression frank.blaschka
@ 2013-03-19 14:10 ` David Miller
3 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2013-03-19 14:10 UTC (permalink / raw)
To: frank.blaschka; +Cc: netdev, linux-s390
From: frank.blaschka@de.ibm.com
Date: Tue, 19 Mar 2013 07:04:41 +0100
> here are 3 bug fixes for net.
All applied, thanks Frank.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-03-19 14:10 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-19 6:04 [patch 0/3] s390: network bug fixes for net frank.blaschka
2013-03-19 6:04 ` [patch 1/3] qeth: delay feature trace frank.blaschka
2013-03-19 6:04 ` [patch 2/3] qeth: Fix invalid router settings handling frank.blaschka
2013-03-19 6:04 ` [patch 3/3] qeth: Fix scatter-gather regression frank.blaschka
2013-03-19 14:10 ` [patch 0/3] s390: network bug fixes for net 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).