+++ /dev/null
-From: Gerald Schaefer <geraldsc@de.ibm.com>
-Subject: qeth: improve no_checksumming handling for layer3
-References: bnc#499845,LTC#53306
-
-Symptom: Messages "hw csum failure" when tcpdump is running
-Problem: If sysfs-attribute checksumming is set to
- "no-checksumming" for a layer3 qeth device, incoming
- data is stored in skbs with incorrect setting of
- skb->ip_summed.
-Solution: Set skb->ip_summed to CHECKSUM_UNNECESSARY if
- RX-checksumming is not required.
-
-Acked-by: John Jolly <jjolly@suse.de>
----
- drivers/s390/net/qeth_l3_main.c | 20 +++++++++++++-------
- 1 file changed, 13 insertions(+), 7 deletions(-)
-
-Index: linux-sles11/drivers/s390/net/qeth_l3_main.c
-===================================================================
---- linux-sles11.orig/drivers/s390/net/qeth_l3_main.c
-+++ linux-sles11/drivers/s390/net/qeth_l3_main.c
-@@ -1939,16 +1939,22 @@ static inline __u16 qeth_l3_rebuild_skb(
- hdr->hdr.l3.vlan_id : *((u16 *)&hdr->hdr.l3.dest_addr[12]);
- }
-
-- skb->ip_summed = card->options.checksum_type;
-- if (card->options.checksum_type == HW_CHECKSUMMING) {
-+ switch (card->options.checksum_type) {
-+ case SW_CHECKSUMMING:
-+ skb->ip_summed = CHECKSUM_NONE;
-+ break;
-+ case NO_CHECKSUMMING:
-+ skb->ip_summed = CHECKSUM_UNNECESSARY;
-+ break;
-+ case HW_CHECKSUMMING:
- if ((hdr->hdr.l3.ext_flags &
-- (QETH_HDR_EXT_CSUM_HDR_REQ |
-- QETH_HDR_EXT_CSUM_TRANSP_REQ)) ==
-- (QETH_HDR_EXT_CSUM_HDR_REQ |
-- QETH_HDR_EXT_CSUM_TRANSP_REQ))
-+ (QETH_HDR_EXT_CSUM_HDR_REQ |
-+ QETH_HDR_EXT_CSUM_TRANSP_REQ)) ==
-+ (QETH_HDR_EXT_CSUM_HDR_REQ |
-+ QETH_HDR_EXT_CSUM_TRANSP_REQ))
- skb->ip_summed = CHECKSUM_UNNECESSARY;
- else
-- skb->ip_summed = SW_CHECKSUMMING;
-+ skb->ip_summed = CHECKSUM_NONE;
- }
-
- return vlan_id;