aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKumar Sanghvi <kumaras@chelsio.com>2014-02-18 07:26:11 -0500
committerDavid S. Miller <davem@davemloft.net>2014-02-18 16:23:01 -0500
commit4fe44dd77602fef804561c46ad10b988ee2859ac (patch)
treeac3b08e389d89b0f1b0eb8acc67dd4b5fdf6ca33
parent57d8b7649d119e8ad6a976a196a21cb4e5e2714c (diff)
cxgb4: LE-Workaround is not atomic in firmware
The LE workaround in firmware is not atomic and fw_ofld_connection_wrs must not interleave. Therefore, when the workaround is enabled, we need to send all ctrlq WRs on a single ctrl queue. Based on original work by Santosh Rastapur <santosh@chelsio.com> 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.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c
index 47ffa64fcf19..23dbe28f8aca 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
@@ -1467,8 +1467,12 @@ static inline int ofld_send(struct adapter *adap, struct sk_buff *skb)
1467{ 1467{
1468 unsigned int idx = skb_txq(skb); 1468 unsigned int idx = skb_txq(skb);
1469 1469
1470 if (unlikely(is_ctrl_pkt(skb))) 1470 if (unlikely(is_ctrl_pkt(skb))) {
1471 /* Single ctrl queue is a requirement for LE workaround path */
1472 if (adap->tids.nsftids)
1473 idx = 0;
1471 return ctrl_xmit(&adap->sge.ctrlq[idx], skb); 1474 return ctrl_xmit(&adap->sge.ctrlq[idx], skb);
1475 }
1472 return ofld_xmit(&adap->sge.ofldtxq[idx], skb); 1476 return ofld_xmit(&adap->sge.ofldtxq[idx], skb);
1473} 1477}
1474 1478