]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Gerald Schaefer <geraldsc@de.ibm.com> |
2 | Subject: qeth: improve no_checksumming handling for layer3 | |
3 | References: bnc#499845,LTC#53306 | |
4 | ||
5 | Symptom: Messages "hw csum failure" when tcpdump is running | |
6 | Problem: 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. | |
10 | Solution: Set skb->ip_summed to CHECKSUM_UNNECESSARY if | |
11 | RX-checksumming is not required. | |
12 | ||
13 | Acked-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 | ||
18 | Index: 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; |