summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@vyatta.com>2013-05-30 10:12:35 -0700
committerThomas Monjalon <thomas.monjalon@6wind.com>2013-09-17 14:09:23 +0200
commit7e9e49feea96f11740095aa2eacd991d092bc009 (patch)
tree64f2d4faa9b83cc4a13f3a992183d16fb7a141a6
parent9b2027a70bf803791776de012bfbca7e545aca70 (diff)
downloaddpdk-7e9e49feea.zip
dpdk-7e9e49feea.tar.gz
dpdk-7e9e49feea.tar.xz
igb: workaround errata with wthresh on 82576
The 82576 has known issues which require the write threshold to be set to 1. See: http://download.intel.com/design/network/specupdt/82576_SPECUPDATE.pdf If not then single packets will hang in transmit ring until more arrive. Simple tests like ping will fail. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Reviewed-by: Vincent Jardin <vincent.jardin@6wind.com>
-rw-r--r--lib/librte_pmd_e1000/igb_rxtx.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/librte_pmd_e1000/igb_rxtx.c b/lib/librte_pmd_e1000/igb_rxtx.c
index 28fe163..462bbc4 100644
--- a/lib/librte_pmd_e1000/igb_rxtx.c
+++ b/lib/librte_pmd_e1000/igb_rxtx.c
@@ -1227,6 +1227,8 @@ eth_igb_tx_queue_setup(struct rte_eth_dev *dev,
txq->pthresh = tx_conf->tx_thresh.pthresh;
txq->hthresh = tx_conf->tx_thresh.hthresh;
txq->wthresh = tx_conf->tx_thresh.wthresh;
+ if (txq->wthresh > 0 && hw->mac.type == e1000_82576)
+ txq->wthresh = 1;
txq->queue_id = queue_idx;
txq->port_id = dev->data->port_id;
@@ -1341,6 +1343,8 @@ eth_igb_rx_queue_setup(struct rte_eth_dev *dev,
rxq->pthresh = rx_conf->rx_thresh.pthresh;
rxq->hthresh = rx_conf->rx_thresh.hthresh;
rxq->wthresh = rx_conf->rx_thresh.wthresh;
+ if (rxq->wthresh > 0 && hw->mac.type == e1000_82576)
+ rxq->wthresh = 1;
rxq->drop_en = rx_conf->rx_drop_en;
rxq->rx_free_thresh = rx_conf->rx_free_thresh;
rxq->queue_id = queue_idx;