Hi Qing, The idea is that we do not want to clean the descriptor ring until we have used "enough" descriptors. So (nb_tx_desc -nb_tx_free) tells us how many descriptors we've used. Once we've used "enough" (i.e. tx_free_thresh) then we will try to clean the descriptor ring. If you look at the simpler "tx_xmit_pkts()" (simple is kind of a misnomer here... it refers to simplicity of features, not simplicity of implementation), we chose to implement the "nb_tx_free < tx_free_thresh" variant. The only real difference is that the semantics of "tx_free_thresh" change from "free descriptors after this many are used" to "free descriptors after this many are remaining".
Thanks, Jeff -----Original Message----- From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Qing Wan Sent: Wednesday, February 12, 2014 3:50 PM To: dev at dpdk.org Subject: [dpdk-dev] condition for calling ixgbe_xmit_cleanup Hi, There are following code in function ixgbe_xmit_pkts, .... if ((txq->nb_tx_desc - txq->nb_tx_free) > txq->tx_free_thresh) { ixgbe_xmit_cleanup(txq); } .... My understanding is, nb_tx_desc means total number of descriptors in ring and nx_tx_free represents how many descriptors are available, so txq->nb_tx_desc - txq->nb_tx_free means how many we have used. I'm not quite understand the meaning of this comparison. Why is the condition not something like "if (txq->nb_tx_free < tx_free_thresh)". really appreciate if someone could help me on this. Thanks Qing