Skip to content

Commit d75f130

Browse files
ecree-solarflaredavem330
authored andcommitted
net: udp: always set up for CHECKSUM_PARTIAL offload
If the dst device doesn't support it, it'll get fixed up later anyway by validate_xmit_skb(). Also, this allows us to take advantage of LCO to avoid summing the payload multiple times. Signed-off-by: Edward Cree <ecree@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 179bc67 commit d75f130

2 files changed

Lines changed: 2 additions & 25 deletions

File tree

net/ipv4/udp.c

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -857,23 +857,11 @@ void udp_set_csum(bool nocheck, struct sk_buff *skb,
857857
uh->check = udp_v4_check(len, saddr, daddr, lco_csum(skb));
858858
if (uh->check == 0)
859859
uh->check = CSUM_MANGLED_0;
860-
} else if (skb_dst(skb) && skb_dst(skb)->dev &&
861-
(skb_dst(skb)->dev->features &
862-
(NETIF_F_IP_CSUM | NETIF_F_HW_CSUM))) {
860+
} else {
863861
skb->ip_summed = CHECKSUM_PARTIAL;
864862
skb->csum_start = skb_transport_header(skb) - skb->head;
865863
skb->csum_offset = offsetof(struct udphdr, check);
866864
uh->check = ~udp_v4_check(len, saddr, daddr, 0);
867-
} else {
868-
__wsum csum;
869-
870-
uh->check = 0;
871-
csum = skb_checksum(skb, 0, len, 0);
872-
uh->check = udp_v4_check(len, saddr, daddr, csum);
873-
if (uh->check == 0)
874-
uh->check = CSUM_MANGLED_0;
875-
876-
skb->ip_summed = CHECKSUM_UNNECESSARY;
877865
}
878866
}
879867
EXPORT_SYMBOL(udp_set_csum);

net/ipv6/ip6_checksum.c

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,22 +103,11 @@ void udp6_set_csum(bool nocheck, struct sk_buff *skb,
103103
uh->check = udp_v6_check(len, saddr, daddr, lco_csum(skb));
104104
if (uh->check == 0)
105105
uh->check = CSUM_MANGLED_0;
106-
} else if (skb_dst(skb) && skb_dst(skb)->dev &&
107-
(skb_dst(skb)->dev->features & NETIF_F_IPV6_CSUM)) {
106+
} else {
108107
skb->ip_summed = CHECKSUM_PARTIAL;
109108
skb->csum_start = skb_transport_header(skb) - skb->head;
110109
skb->csum_offset = offsetof(struct udphdr, check);
111110
uh->check = ~udp_v6_check(len, saddr, daddr, 0);
112-
} else {
113-
__wsum csum;
114-
115-
uh->check = 0;
116-
csum = skb_checksum(skb, 0, len, 0);
117-
uh->check = udp_v6_check(len, saddr, daddr, csum);
118-
if (uh->check == 0)
119-
uh->check = CSUM_MANGLED_0;
120-
121-
skb->ip_summed = CHECKSUM_UNNECESSARY;
122111
}
123112
}
124113
EXPORT_SYMBOL(udp6_set_csum);

0 commit comments

Comments
 (0)