Thread (13 messages) 13 messages, 4 authors, 2016-06-30

Re: [Patch net] mlx4: set csum_complete_sw bit when fixing complete csum

From: Cong Wang <hidden>
Date: 2016-06-27 21:50:19

On Mon, Jun 27, 2016 at 2:47 PM, Tom Herbert [off-list ref] wrote:
On Mon, Jun 27, 2016 at 2:44 PM, Cong Wang [off-list ref] wrote:
quoted
On Mon, Jun 27, 2016 at 2:08 PM, Or Gerlitz [off-list ref] wrote:
quoted
On Mon, Jun 27, 2016 at 9:22 PM, Cong Wang [off-list ref] wrote:
quoted
The stack doesn't trust the complete csum by hardware
even when it is correct.
Can you explain that a little further?
Sure, here is the code in __skb_checksum_complete():

        /* skb->csum holds pseudo checksum */
        sum = csum_fold(csum_add(skb->csum, csum));
        if (likely(!sum)) {
                if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE) &&
                    !skb->csum_complete_sw)
                        netdev_rx_csum_fault(skb->dev);
        }

So when sum == 0, it means the checksum is correct. And
we already set ->ip_summed to CHECKSUM_COMPLETE
after check_csum(), and ->csum_complete_sw is initialized
to 0 when we allocate the skb. This is why we trigger
netdev_rx_csum_fault().
Yes, but this also means that the driver gave the stack a checksum
complete value that was incorrect. That's an error.
That is the whole purpose of commit f8c6455bb04b944edb69e,
isn't it?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help