diff options
| author | Kumar Sanghvi <kumaras@chelsio.com> | 2014-03-13 11:20:50 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-03-13 14:36:05 -0400 |
| commit | ca71de6ba7c18a3a1576e04f7ed8d8508ceba4c9 (patch) | |
| tree | a1559c68612d6f4d031f5fa3894e4760fd82f339 | |
| parent | c2b955e0063411826d2c4540c96a8f2c4e1c2cb0 (diff) | |
cxgb4: Calculate len properly for LSO path
Commit 0034b29 ("cxgb4: Don't assume LSO only uses SGL path in t4_eth_xmit()")
introduced a regression where-in length was calculated wrongly for LSO path,
causing chip hangs.
So, correct the calculation of len.
Fixes: 0034b29 ("cxgb4: Don't assume LSO only uses SGL path in t4_eth_xmit()")
Signed-off-by: Kumar Sanghvi <kumaras@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/sge.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c index a7c56b3b9fc9..46429f9d0592 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/sge.c +++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c | |||
| @@ -1051,7 +1051,6 @@ out_free: dev_kfree_skb(skb); | |||
| 1051 | end = (u64 *)wr + flits; | 1051 | end = (u64 *)wr + flits; |
| 1052 | 1052 | ||
| 1053 | len = immediate ? skb->len : 0; | 1053 | len = immediate ? skb->len : 0; |
| 1054 | len += sizeof(*cpl); | ||
| 1055 | ssi = skb_shinfo(skb); | 1054 | ssi = skb_shinfo(skb); |
| 1056 | if (ssi->gso_size) { | 1055 | if (ssi->gso_size) { |
| 1057 | struct cpl_tx_pkt_lso *lso = (void *)wr; | 1056 | struct cpl_tx_pkt_lso *lso = (void *)wr; |
| @@ -1079,6 +1078,7 @@ out_free: dev_kfree_skb(skb); | |||
| 1079 | q->tso++; | 1078 | q->tso++; |
| 1080 | q->tx_cso += ssi->gso_segs; | 1079 | q->tx_cso += ssi->gso_segs; |
| 1081 | } else { | 1080 | } else { |
| 1081 | len += sizeof(*cpl); | ||
| 1082 | wr->op_immdlen = htonl(FW_WR_OP(FW_ETH_TX_PKT_WR) | | 1082 | wr->op_immdlen = htonl(FW_WR_OP(FW_ETH_TX_PKT_WR) | |
| 1083 | FW_WR_IMMDLEN(len)); | 1083 | FW_WR_IMMDLEN(len)); |
| 1084 | cpl = (void *)(wr + 1); | 1084 | cpl = (void *)(wr + 1); |
