Commit 55508d60 authored by Michał Mirosław's avatar Michał Mirosław Committed by David S. Miller

net: Use skb_checksum_start_offset()

Replace skb->csum_start - skb_headroom(skb) with skb_checksum_start_offset().

Note for usb/smsc95xx: skb->data - skb->head == skb_headroom(skb).
Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 04fb451e
...@@ -2174,7 +2174,7 @@ static int atl1_tx_csum(struct atl1_adapter *adapter, struct sk_buff *skb, ...@@ -2174,7 +2174,7 @@ static int atl1_tx_csum(struct atl1_adapter *adapter, struct sk_buff *skb,
u8 css, cso; u8 css, cso;
if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) { if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
css = (u8) (skb->csum_start - skb_headroom(skb)); css = skb_checksum_start_offset(skb);
cso = css + (u8) skb->csum_offset; cso = css + (u8) skb->csum_offset;
if (unlikely(css & 0x1)) { if (unlikely(css & 0x1)) {
/* L1 hardware requires an even number here */ /* L1 hardware requires an even number here */
......
...@@ -504,8 +504,7 @@ static int macvtap_skb_to_vnet_hdr(const struct sk_buff *skb, ...@@ -504,8 +504,7 @@ static int macvtap_skb_to_vnet_hdr(const struct sk_buff *skb,
if (skb->ip_summed == CHECKSUM_PARTIAL) { if (skb->ip_summed == CHECKSUM_PARTIAL) {
vnet_hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM; vnet_hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
vnet_hdr->csum_start = skb->csum_start - vnet_hdr->csum_start = skb_checksum_start_offset(skb);
skb_headroom(skb);
vnet_hdr->csum_offset = skb->csum_offset; vnet_hdr->csum_offset = skb->csum_offset;
} /* else everything is zero */ } /* else everything is zero */
......
...@@ -757,7 +757,7 @@ static __inline__ ssize_t tun_put_user(struct tun_struct *tun, ...@@ -757,7 +757,7 @@ static __inline__ ssize_t tun_put_user(struct tun_struct *tun,
if (skb->ip_summed == CHECKSUM_PARTIAL) { if (skb->ip_summed == CHECKSUM_PARTIAL) {
gso.flags = VIRTIO_NET_HDR_F_NEEDS_CSUM; gso.flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
gso.csum_start = skb->csum_start - skb_headroom(skb); gso.csum_start = skb_checksum_start_offset(skb);
gso.csum_offset = skb->csum_offset; gso.csum_offset = skb->csum_offset;
} /* else everything is zero */ } /* else everything is zero */
......
...@@ -1163,9 +1163,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) ...@@ -1163,9 +1163,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
static u32 smsc95xx_calc_csum_preamble(struct sk_buff *skb) static u32 smsc95xx_calc_csum_preamble(struct sk_buff *skb)
{ {
int len = skb->data - skb->head; u16 low_16 = (u16)skb_checksum_start_offset(skb);
u16 high_16 = (u16)(skb->csum_offset + skb->csum_start - len); u16 high_16 = low_16 + skb->csum_offset;
u16 low_16 = (u16)(skb->csum_start - len);
return (high_16 << 16) | low_16; return (high_16 << 16) | low_16;
} }
...@@ -1193,7 +1192,7 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, ...@@ -1193,7 +1192,7 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev,
if (skb->len <= 45) { if (skb->len <= 45) {
/* workaround - hardware tx checksum does not work /* workaround - hardware tx checksum does not work
* properly with extremely small packets */ * properly with extremely small packets */
long csstart = skb->csum_start - skb_headroom(skb); long csstart = skb_checksum_start_offset(skb);
__wsum calc = csum_partial(skb->data + csstart, __wsum calc = csum_partial(skb->data + csstart,
skb->len - csstart, 0); skb->len - csstart, 0);
*((__sum16 *)(skb->data + csstart *((__sum16 *)(skb->data + csstart
......
...@@ -519,7 +519,7 @@ static int xmit_skb(struct virtnet_info *vi, struct sk_buff *skb) ...@@ -519,7 +519,7 @@ static int xmit_skb(struct virtnet_info *vi, struct sk_buff *skb)
if (skb->ip_summed == CHECKSUM_PARTIAL) { if (skb->ip_summed == CHECKSUM_PARTIAL) {
hdr->hdr.flags = VIRTIO_NET_HDR_F_NEEDS_CSUM; hdr->hdr.flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
hdr->hdr.csum_start = skb->csum_start - skb_headroom(skb); hdr->hdr.csum_start = skb_checksum_start_offset(skb);
hdr->hdr.csum_offset = skb->csum_offset; hdr->hdr.csum_offset = skb->csum_offset;
} else { } else {
hdr->hdr.flags = 0; hdr->hdr.flags = 0;
......
...@@ -1793,7 +1793,7 @@ int skb_checksum_help(struct sk_buff *skb) ...@@ -1793,7 +1793,7 @@ int skb_checksum_help(struct sk_buff *skb)
goto out_set_summed; goto out_set_summed;
} }
offset = skb->csum_start - skb_headroom(skb); offset = skb_checksum_start_offset(skb);
BUG_ON(offset >= skb_headlen(skb)); BUG_ON(offset >= skb_headlen(skb));
csum = skb_checksum(skb, offset, skb->len - offset, 0); csum = skb_checksum(skb, offset, skb->len - offset, 0);
...@@ -2090,8 +2090,8 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, ...@@ -2090,8 +2090,8 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
* checksumming here. * checksumming here.
*/ */
if (skb->ip_summed == CHECKSUM_PARTIAL) { if (skb->ip_summed == CHECKSUM_PARTIAL) {
skb_set_transport_header(skb, skb->csum_start - skb_set_transport_header(skb,
skb_headroom(skb)); skb_checksum_start_offset(skb));
if (!dev_can_checksum(dev, skb) && if (!dev_can_checksum(dev, skb) &&
skb_checksum_help(skb)) skb_checksum_help(skb))
goto out_kfree_skb; goto out_kfree_skb;
......
...@@ -1824,7 +1824,7 @@ void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to) ...@@ -1824,7 +1824,7 @@ void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to)
long csstart; long csstart;
if (skb->ip_summed == CHECKSUM_PARTIAL) if (skb->ip_summed == CHECKSUM_PARTIAL)
csstart = skb->csum_start - skb_headroom(skb); csstart = skb_checksum_start_offset(skb);
else else
csstart = skb_headlen(skb); csstart = skb_headlen(skb);
......
...@@ -2226,7 +2226,7 @@ struct sk_buff *udp4_ufo_fragment(struct sk_buff *skb, int features) ...@@ -2226,7 +2226,7 @@ struct sk_buff *udp4_ufo_fragment(struct sk_buff *skb, int features)
/* Do software UFO. Complete and fill in the UDP checksum as HW cannot /* Do software UFO. Complete and fill in the UDP checksum as HW cannot
* do checksum of UDP packets sent as multiple IP fragments. * do checksum of UDP packets sent as multiple IP fragments.
*/ */
offset = skb->csum_start - skb_headroom(skb); offset = skb_checksum_start_offset(skb);
csum = skb_checksum(skb, offset, skb->len - offset, 0); csum = skb_checksum(skb, offset, skb->len - offset, 0);
offset += skb->csum_offset; offset += skb->csum_offset;
*(__sum16 *)(skb->data + offset) = csum_fold(csum); *(__sum16 *)(skb->data + offset) = csum_fold(csum);
......
...@@ -1650,8 +1650,7 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock, ...@@ -1650,8 +1650,7 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
if (skb->ip_summed == CHECKSUM_PARTIAL) { if (skb->ip_summed == CHECKSUM_PARTIAL) {
vnet_hdr.flags = VIRTIO_NET_HDR_F_NEEDS_CSUM; vnet_hdr.flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
vnet_hdr.csum_start = skb->csum_start - vnet_hdr.csum_start = skb_checksum_start_offset(skb);
skb_headroom(skb);
vnet_hdr.csum_offset = skb->csum_offset; vnet_hdr.csum_offset = skb->csum_offset;
} /* else everything is zero */ } /* else everything is zero */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment