Message ID | 20090312213345.GA12653@ajones-laptop.nbttech.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
I have added a few comments inline. Arthur Jones wrote: > When the 82575 is fed 802.1q packets, it chokes with > an error of the form: > > igb 0000:08:00.1: partial checksum but proto=81 > > As the logic there was not smart enough to look into > the vlan header to pick out the encapsulated protocol. > > There are times when we'd like to send these packets > out without having to configure a vlan on the interface. > Here we check for the vlan tag and allow the packet to > go out with the correct hardware checksum. > > Thanks to Kand Ly <kand@riverbed.com> for discovering the > issue and the coming up with a solution. This patch is > based upon his work. > > Macro fixups from Stephen Hemminger <shemminger@vyatta.com> > > Signed-off-by: Arthur Jones <ajones@riverbed.com> > --- > drivers/net/igb/igb_main.c | 12 +++++++++++- > 1 files changed, 11 insertions(+), 1 deletions(-) > > diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c > index 78558f8..e4ef1f6 100644 > --- a/drivers/net/igb/igb_main.c > +++ b/drivers/net/igb/igb_main.c > @@ -3017,7 +3017,17 @@ static inline bool igb_tx_csum_adv(struct igb_adapter *adapter, > tu_cmd |= (E1000_TXD_CMD_DEXT | E1000_ADVTXD_DTYP_CTXT); > > if (skb->ip_summed == CHECKSUM_PARTIAL) { > - switch (skb->protocol) { > + __be16 protocol; > + > + if (skb->protocol == cpu_to_be16(ETH_P_8021Q)) { > + const struct vlan_ethhdr *vhdr = > + (const struct vlan_ethhdr *) skb->data; This should probably reference skb_mac_header(skb) instead of data in the event that data is an offset instead of a pointer. > + > + protocol = vhdr->h_vlan_encapsulated_proto; > + } else > + protocol = skb->protocol; > + This else should have braces since the matching if was using braces. > + switch (protocol) { > case cpu_to_be16(ETH_P_IP): > tu_cmd |= E1000_ADVTXD_TUCMD_IPV4; > if (ip_hdr(skb)->protocol == IPPROTO_TCP) Thanks, Alex -- 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
Hi Alexander, ...
On Thu, Mar 12, 2009 at 03:30:02PM -0700, Alexander Duyck wrote:
> I have added a few comments inline.
Thanks, I'll fix these up and re-submit...
Arthur
--
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 Fri, Mar 13, 2009 at 07:55:01AM -0700, Arthur Jones wrote: > Hi Alexander, ... > > On Thu, Mar 12, 2009 at 03:30:02PM -0700, Alexander Duyck wrote: > > I have added a few comments inline. > > Thanks, I'll fix these up and re-submit... I'm out of the office today, though, so testing will have to wait until Monday -- I'll resend after the patch is tested... Arthur -- 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
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 78558f8..e4ef1f6 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c @@ -3017,7 +3017,17 @@ static inline bool igb_tx_csum_adv(struct igb_adapter *adapter, tu_cmd |= (E1000_TXD_CMD_DEXT | E1000_ADVTXD_DTYP_CTXT); if (skb->ip_summed == CHECKSUM_PARTIAL) { - switch (skb->protocol) { + __be16 protocol; + + if (skb->protocol == cpu_to_be16(ETH_P_8021Q)) { + const struct vlan_ethhdr *vhdr = + (const struct vlan_ethhdr *) skb->data; + + protocol = vhdr->h_vlan_encapsulated_proto; + } else + protocol = skb->protocol; + + switch (protocol) { case cpu_to_be16(ETH_P_IP): tu_cmd |= E1000_ADVTXD_TUCMD_IPV4; if (ip_hdr(skb)->protocol == IPPROTO_TCP)
When the 82575 is fed 802.1q packets, it chokes with an error of the form: igb 0000:08:00.1: partial checksum but proto=81 As the logic there was not smart enough to look into the vlan header to pick out the encapsulated protocol. There are times when we'd like to send these packets out without having to configure a vlan on the interface. Here we check for the vlan tag and allow the packet to go out with the correct hardware checksum. Thanks to Kand Ly <kand@riverbed.com> for discovering the issue and the coming up with a solution. This patch is based upon his work. Macro fixups from Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: Arthur Jones <ajones@riverbed.com> --- drivers/net/igb/igb_main.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-)