On Thu, Nov 15, 2018 at 06:23:38PM -0800, Cong Wang wrote: > > > Normally if the hardware's partial checksum is valid then we just > > trust it and send the packet along. However, if the partial > > checksum is invalid we don't trust it and we will compute the > > whole checksum manually which is what ends up in sum. > > Not sure if I understand partial checksum here, but it is the > CHECKSUM_COMPLETE case which I am trying to fix, not > CHECKSUM_PARTIAL.
What I meant by partial checksum is the checksum produced by the hardware on RX. In the kernel we call that CHECKSUM_COMPLETE. CHECKSUM_PARTIAL is the absence of the substantial part of the checksum which is something we use in the kernel primarily for TX. Yes the names are confusing :) > So, in other word, a checksum *match* is the intended to detect > this HW RX checksum fault? Correct. Or more likely it's probably a bug in either the driver or if there are overlaying code such as VLAN then in that code. Basically if the RX checksum is buggy, it's much more likely to cause a valid packet to be rejected than to cause an invalid packet to be accepted, because we still verify that checksum against the pseudoheader. So we only attempt to catch buggy hardware/drivers by doing a second manual verification for the case where the packet is flagged as invalid. > Sure, my case is nearly same with Pawel's, except I have no vlan: > https://marc.info/?l=linux-netdev&m=154086647601721&w=2 Can you please provide your backtrace? Thanks, -- Email: Herbert Xu <herb...@gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt