From: Stephen Hemminger Date: Thu, 30 May 2013 17:12:35 +0000 (-0700) Subject: igb: workaround errata with wthresh on 82576 X-Git-Tag: spdx-start~11233 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=7e9e49feea96f11740095aa2eacd991d092bc009;p=dpdk.git 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 Reviewed-by: Vincent Jardin --- diff --git a/lib/librte_pmd_e1000/igb_rxtx.c b/lib/librte_pmd_e1000/igb_rxtx.c index 28fe163c7a..462bbc4621 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;