Skip to content

Commit

Permalink
cxgb4: don't offload Rx checksums for IPv6 fragments
Browse files Browse the repository at this point in the history
The checksum provided by the device doesn't include the L3 headers,
as IPv6 expects.

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Dimitris Michailidis authored and David S. Miller committed Aug 2, 2010
1 parent 63bccee commit ba5d3c6
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 3 deletions.
7 changes: 4 additions & 3 deletions drivers/net/cxgb4/sge.c
Original file line number Diff line number Diff line change
Expand Up @@ -1593,14 +1593,15 @@ int t4_ethrx_handler(struct sge_rspq *q, const __be64 *rsp,

if (csum_ok && (pi->rx_offload & RX_CSO) &&
(pkt->l2info & htonl(RXF_UDP | RXF_TCP))) {
if (!pkt->ip_frag)
if (!pkt->ip_frag) {
skb->ip_summed = CHECKSUM_UNNECESSARY;
else {
rxq->stats.rx_cso++;
} else if (pkt->l2info & htonl(RXF_IP)) {
__sum16 c = (__force __sum16)pkt->csum;
skb->csum = csum_unfold(c);
skb->ip_summed = CHECKSUM_COMPLETE;
rxq->stats.rx_cso++;
}
rxq->stats.rx_cso++;
} else
skb->ip_summed = CHECKSUM_NONE;

Expand Down
2 changes: 2 additions & 0 deletions drivers/net/cxgb4/t4_msg.h
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,8 @@ struct cpl_rx_pkt {
__be32 l2info;
#define RXF_UDP (1 << 22)
#define RXF_TCP (1 << 23)
#define RXF_IP (1 << 24)
#define RXF_IP6 (1 << 25)
__be16 hdr_len;
__be16 err_vec;
};
Expand Down

0 comments on commit ba5d3c6

Please sign in to comment.