diff options
| author | Tom Herbert <therbert@google.com> | 2015-02-02 19:07:34 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-02-04 16:54:07 -0500 |
| commit | dcdc8994697faa789669c3fdaca1a8bc27a8f356 (patch) | |
| tree | a105b07298d337a0b04b114422638768c3ee9266 /drivers/net/vxlan.c | |
| parent | 9a05dde59a35eee5643366d3d1e1f43fc9069adb (diff) | |
net: add skb functions to process remote checksum offload
This patch adds skb_remcsum_process and skb_gro_remcsum_process to
perform the appropriate adjustments to the skb when receiving
remote checksum offload.
Updated vxlan and gue to use these functions.
Tested: Ran TCP_RR and TCP_STREAM netperf for VXLAN and GUE, did
not see any change in performance.
Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/vxlan.c')
| -rw-r--r-- | drivers/net/vxlan.c | 18 |
1 files changed, 2 insertions, 16 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 31bac2a21ce3..c184717e8b28 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
| @@ -558,7 +558,6 @@ static struct vxlanhdr *vxlan_gro_remcsum(struct sk_buff *skb, | |||
| 558 | u32 data) | 558 | u32 data) |
| 559 | { | 559 | { |
| 560 | size_t start, offset, plen; | 560 | size_t start, offset, plen; |
| 561 | __wsum delta; | ||
| 562 | 561 | ||
| 563 | if (skb->remcsum_offload) | 562 | if (skb->remcsum_offload) |
| 564 | return vh; | 563 | return vh; |
| @@ -580,12 +579,7 @@ static struct vxlanhdr *vxlan_gro_remcsum(struct sk_buff *skb, | |||
| 580 | return NULL; | 579 | return NULL; |
| 581 | } | 580 | } |
| 582 | 581 | ||
| 583 | delta = remcsum_adjust((void *)vh + hdrlen, | 582 | skb_gro_remcsum_process(skb, (void *)vh + hdrlen, start, offset); |
| 584 | NAPI_GRO_CB(skb)->csum, start, offset); | ||
| 585 | |||
| 586 | /* Adjust skb->csum since we changed the packet */ | ||
| 587 | skb->csum = csum_add(skb->csum, delta); | ||
| 588 | NAPI_GRO_CB(skb)->csum = csum_add(NAPI_GRO_CB(skb)->csum, delta); | ||
| 589 | 583 | ||
| 590 | skb->remcsum_offload = 1; | 584 | skb->remcsum_offload = 1; |
| 591 | 585 | ||
| @@ -1159,7 +1153,6 @@ static struct vxlanhdr *vxlan_remcsum(struct sk_buff *skb, struct vxlanhdr *vh, | |||
| 1159 | size_t hdrlen, u32 data) | 1153 | size_t hdrlen, u32 data) |
| 1160 | { | 1154 | { |
| 1161 | size_t start, offset, plen; | 1155 | size_t start, offset, plen; |
| 1162 | __wsum delta; | ||
| 1163 | 1156 | ||
| 1164 | if (skb->remcsum_offload) { | 1157 | if (skb->remcsum_offload) { |
| 1165 | /* Already processed in GRO path */ | 1158 | /* Already processed in GRO path */ |
| @@ -1179,14 +1172,7 @@ static struct vxlanhdr *vxlan_remcsum(struct sk_buff *skb, struct vxlanhdr *vh, | |||
| 1179 | 1172 | ||
| 1180 | vh = (struct vxlanhdr *)(udp_hdr(skb) + 1); | 1173 | vh = (struct vxlanhdr *)(udp_hdr(skb) + 1); |
| 1181 | 1174 | ||
| 1182 | if (unlikely(skb->ip_summed != CHECKSUM_COMPLETE)) | 1175 | skb_remcsum_process(skb, (void *)vh + hdrlen, start, offset); |
| 1183 | __skb_checksum_complete(skb); | ||
| 1184 | |||
| 1185 | delta = remcsum_adjust((void *)vh + hdrlen, | ||
| 1186 | skb->csum, start, offset); | ||
| 1187 | |||
| 1188 | /* Adjust skb->csum since we changed the packet */ | ||
| 1189 | skb->csum = csum_add(skb->csum, delta); | ||
| 1190 | 1176 | ||
| 1191 | return vh; | 1177 | return vh; |
| 1192 | } | 1178 | } |
