netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).