Message ID | 1259637579.3709.196.camel@localhost |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
On Tuesday, December 01, 2009 11:20 AM Ben Hutchings <ben@decadent.org.uk> > > I received a bug report <http://bugs.debian.org/558426> that > shows atl1e corrupting IPv6 packets. I have reproduced this > on an Eee PC 901 and found that it is linked to TSO. The > most obvious thing wrong with the driver code is that it > calculates the super-packet length incorrectly. > However, fixing that: > > --- a/drivers/net/atl1e/atl1e_main.c > +++ b/drivers/net/atl1e/atl1e_main.c > @@ -1667,6 +1667,7 @@ static int atl1e_tso_csum(struct > atl1e_adapter *adapter, > > if (offload_type & SKB_GSO_TCPV6) { > real_len = (((unsigned char > *)ipv6_hdr(skb) - skb->data) > + + sizeof(struct ipv6hdr) > + > ntohs(ipv6_hdr(skb)->payload_len)); > if (real_len < skb->len) > pskb_trim(skb, real_len); > --- END --- > > does not solve the problem. Presumably this function is not > constructing correct DMA descriptors for TSOv6. > > Please fix this, or I will submit a patch to remove this > feature from the driver. > > Ben. > ok, I will try to reproduce it. Best wishes jie -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tuesday, December 01, 2009 11:20 AM Ben Hutchings <ben@decadent.org.uk> wrote: > > I received a bug report <http://bugs.debian.org/558426> that > shows atl1e corrupting IPv6 packets. I have reproduced this > on an Eee PC 901 and found that it is linked to TSO. The > most obvious thing wrong with the driver code is that it > calculates the super-packet length incorrectly. > However, fixing that: > > --- a/drivers/net/atl1e/atl1e_main.c > +++ b/drivers/net/atl1e/atl1e_main.c > @@ -1667,6 +1667,7 @@ static int atl1e_tso_csum(struct > atl1e_adapter *adapter, > > if (offload_type & SKB_GSO_TCPV6) { > real_len = (((unsigned char > *)ipv6_hdr(skb) - skb->data) > + + sizeof(struct ipv6hdr) > + > ntohs(ipv6_hdr(skb)->payload_len)); > if (real_len < skb->len) > pskb_trim(skb, real_len); > --- END --- > > does not solve the problem. Presumably this function is not > constructing correct DMA descriptors for TSOv6. > > Please fix this, or I will submit a patch to remove this > feature from the driver. > ou, there is hareware limit to support TSOv6, just disable it. Best wishes jie -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
--- a/drivers/net/atl1e/atl1e_main.c +++ b/drivers/net/atl1e/atl1e_main.c @@ -1667,6 +1667,7 @@ static int atl1e_tso_csum(struct atl1e_adapter *adapter, if (offload_type & SKB_GSO_TCPV6) { real_len = (((unsigned char *)ipv6_hdr(skb) - skb->data) + + sizeof(struct ipv6hdr) + ntohs(ipv6_hdr(skb)->payload_len)); if (real_len < skb->len) pskb_trim(skb, real_len); --- END ---