]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.arch/s390-13-03-qeth_checksum.patch
Merge branch 'master' into next
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.arch / s390-13-03-qeth_checksum.patch
CommitLineData
2cb7cef9
BS
1From: Gerald Schaefer <geraldsc@de.ibm.com>
2Subject: qeth: improve no_checksumming handling for layer3
3References: bnc#499845,LTC#53306
4
5Symptom: Messages "hw csum failure" when tcpdump is running
6Problem: If sysfs-attribute checksumming is set to
7 "no-checksumming" for a layer3 qeth device, incoming
8 data is stored in skbs with incorrect setting of
9 skb->ip_summed.
10Solution: Set skb->ip_summed to CHECKSUM_UNNECESSARY if
11 RX-checksumming is not required.
12
13Acked-by: John Jolly <jjolly@suse.de>
14---
15 drivers/s390/net/qeth_l3_main.c | 20 +++++++++++++-------
16 1 file changed, 13 insertions(+), 7 deletions(-)
17
18Index: linux-sles11/drivers/s390/net/qeth_l3_main.c
19===================================================================
20--- linux-sles11.orig/drivers/s390/net/qeth_l3_main.c
21+++ linux-sles11/drivers/s390/net/qeth_l3_main.c
22@@ -1939,16 +1939,22 @@ static inline __u16 qeth_l3_rebuild_skb(
23 hdr->hdr.l3.vlan_id : *((u16 *)&hdr->hdr.l3.dest_addr[12]);
24 }
25
26- skb->ip_summed = card->options.checksum_type;
27- if (card->options.checksum_type == HW_CHECKSUMMING) {
28+ switch (card->options.checksum_type) {
29+ case SW_CHECKSUMMING:
30+ skb->ip_summed = CHECKSUM_NONE;
31+ break;
32+ case NO_CHECKSUMMING:
33+ skb->ip_summed = CHECKSUM_UNNECESSARY;
34+ break;
35+ case HW_CHECKSUMMING:
36 if ((hdr->hdr.l3.ext_flags &
37- (QETH_HDR_EXT_CSUM_HDR_REQ |
38- QETH_HDR_EXT_CSUM_TRANSP_REQ)) ==
39- (QETH_HDR_EXT_CSUM_HDR_REQ |
40- QETH_HDR_EXT_CSUM_TRANSP_REQ))
41+ (QETH_HDR_EXT_CSUM_HDR_REQ |
42+ QETH_HDR_EXT_CSUM_TRANSP_REQ)) ==
43+ (QETH_HDR_EXT_CSUM_HDR_REQ |
44+ QETH_HDR_EXT_CSUM_TRANSP_REQ))
45 skb->ip_summed = CHECKSUM_UNNECESSARY;
46 else
47- skb->ip_summed = SW_CHECKSUMMING;
48+ skb->ip_summed = CHECKSUM_NONE;
49 }
50
51 return vlan_id;