From: David Laight <David.Laight@ACULAB.COM>
To: 'Vladimir Oltean' <olteanv@gmail.com>
Cc: Eric Dumazet <edumazet@google.com>,
Eric Dumazet <eric.dumazet@gmail.com>,
"David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, netdev <netdev@vger.kernel.org>
Subject: RE: [PATCH net-next 2/2] net: optimize skb_postpull_rcsum()
Date: Fri, 3 Dec 2021 14:51:15 +0000 [thread overview]
Message-ID: <7aa1271399664bb3ac453a7f4d64798e@AcuMS.aculab.com> (raw)
In-Reply-To: <20211202214009.5hm3diwom4qsbsjd@skbuf>
From: Vladimir Oltean
> Sent: 02 December 2021 21:40
>
> On Thu, Dec 02, 2021 at 08:58:46PM +0000, David Laight wrote:
> > > To me it looks like the strange part is that the checksum of the removed
> > > block (printed by me as "csum_partial(start, len, 0)" inside
> > > skb_postpull_rcsum()) is the same as the skb->csum itself.
> >
> > If you are removing all the bytes that made the original checksum
> > that will happen.
> > And that might be true for the packets you are building.
>
> Yes, I am not removing all the bytes that made up the original L2
> payload csum. Let me pull up the skb_dump from my original message:
>
> here is where the enetc saw the the "start" variable (old skb->data)
> beginning of the frame points here
> v v
> skb headroom: 00000040: 88 80 00 0a 00 33 9d 40 f0 41 01 80 00 00 08 0f
>
> OCELOT_TAG_LEN bytes into the frame,
> the real MAC header can be found
> v
> skb headroom: 00000050: 00 10 00 00 00 04 9f 05 f6 28 ba ae e4 b6 2c 3d
> skb headroom: 00000060: 08 00
> skb linear: 00000000: 45 00 00 54 27 ac 00 00 40 01 09 a8 c0 a8 64 03
> ^
> the skb_postpull_rcsum is called from "start"
> pointer until the first byte prior to this one
>
> skb linear: 00000010: c0 a8 64 01 00 00 10 e6 01 5c 00 04 49 30 a7 61
> skb linear: 00000020: 00 00 00 00 3d 55 01 00 00 00 00 00 10 11 12 13
> skb linear: 00000030: 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23
> skb linear: 00000040: 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33
> skb linear: 00000050: 34 35 36 37
>
> So skb_postpull_rcsum() is called from "skb headroom" offset 0x4e to
> offset 0x61 inclusive (0x61 - 0x4e + 1 = 20 == OCELOT_TAG_LEN).
>
> However as I understand it, the CHECKSUM_COMPLETE of this packet is
> calculated by enetc from "skb headroom" offset 0x4e and all the way
> until "skb linear" offset 0x53. So there is still a good chunk of packet
> to go. That's why it is still a mystery to me why the checksums would be
> equal
...
Possibly because the rest of the packet actually has a valid checksum
(ie 0xffff) that (somewhere) got reduced to 16 bits.
If the checksum of the header were then added, and later removed
you'd end up inverting ~0u.
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
next prev parent reply other threads:[~2021-12-03 14:51 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-24 20:24 [PATCH net-next 0/2] net: small csum optimizations Eric Dumazet
2021-11-24 20:24 ` [PATCH net-next 1/2] gro: optimize skb_gro_postpull_rcsum() Eric Dumazet
2021-11-24 20:24 ` [PATCH net-next 2/2] net: optimize skb_postpull_rcsum() Eric Dumazet
2021-11-25 9:41 ` David Laight
2021-11-25 13:32 ` Eric Dumazet
2021-11-25 14:29 ` David Laight
2021-12-02 13:10 ` Vladimir Oltean
2021-12-02 14:51 ` Eric Dumazet
2021-12-02 16:29 ` Vladimir Oltean
2021-12-02 19:32 ` Eric Dumazet
2021-12-02 20:37 ` Eric Dumazet
2021-12-02 21:07 ` Vladimir Oltean
2021-12-02 20:40 ` Vladimir Oltean
2021-12-02 20:58 ` Vladimir Oltean
2021-12-02 20:58 ` David Laight
2021-12-02 21:40 ` Vladimir Oltean
2021-12-03 14:51 ` David Laight [this message]
2021-12-03 14:57 ` David Laight
2021-12-03 16:14 ` Vladimir Oltean
2021-12-03 16:30 ` Eric Dumazet
2021-12-03 16:47 ` David Laight
2021-12-03 16:58 ` Eric Dumazet
2021-12-03 17:41 ` David Laight
2021-12-02 15:06 ` David Laight
2021-12-02 15:22 ` Eric Dumazet
2021-11-26 5:20 ` [PATCH net-next 0/2] net: small csum optimizations patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7aa1271399664bb3ac453a7f4d64798e@AcuMS.aculab.com \
--to=david.laight@aculab.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.