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:44:34 +0200
commitb13ebd6a9ed540b1b1371490d052d2edd47c23bb (patch)
treee6fa3ef5ba698efae3f8a832c97bab42f7ebc60e
parentdb15f19ec8d057091e436676f42fed91b4a27dbe (diff)
downloaddpdk-b13ebd6a9ed540b1b1371490d052d2edd47c23bb.zip
dpdk-b13ebd6a9ed540b1b1371490d052d2edd47c23bb.tar.gz
dpdk-b13ebd6a9ed540b1b1371490d052d2edd47c23bb.tar.xz
igb: restore 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. The workaround was in the wrong file (commit a30ebfbb8c3a). Move it in igb one to restore original patch (7e9e49feea). Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
-rw-r--r--lib/librte_pmd_e1000/em_rxtx.c5
-rw-r--r--lib/librte_pmd_e1000/igb_rxtx.c4
2 files changed, 4 insertions, 5 deletions
diff --git a/lib/librte_pmd_e1000/em_rxtx.c b/lib/librte_pmd_e1000/em_rxtx.c
index eb00b0c..bc3fc97 100644
--- a/lib/librte_pmd_e1000/em_rxtx.c
+++ b/lib/librte_pmd_e1000/em_rxtx.c
@@ -1271,8 +1271,6 @@ eth_em_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;
@@ -1394,9 +1392,6 @@ eth_em_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->rx_free_thresh = rx_conf->rx_free_thresh;
rxq->queue_id = queue_idx;
rxq->port_id = dev->data->port_id;
diff --git a/lib/librte_pmd_e1000/igb_rxtx.c b/lib/librte_pmd_e1000/igb_rxtx.c
index 71f2ef4..1f1755d 100644
--- a/lib/librte_pmd_e1000/igb_rxtx.c
+++ b/lib/librte_pmd_e1000/igb_rxtx.c
@@ -1230,6 +1230,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->reg_idx = (uint16_t)((RTE_ETH_DEV_SRIOV(dev).active == 0) ?
queue_idx : RTE_ETH_DEV_SRIOV(dev).def_pool_q_idx + queue_idx);
@@ -1346,6 +1348,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;