This patch refactors dpdk_queue_flush() to reuse code in dpdk_queue_pkts().
Signed-off-by: Ryan Wilson <wr...@nicira.com> --- lib/netdev-dpdk.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 72add87..084e8cd 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -567,16 +567,12 @@ netdev_dpdk_rxq_dealloc(struct netdev_rxq *rxq_) rte_free(rx); } -inline static void -dpdk_queue_flush(struct netdev_dpdk *dev, int qid) +static void +dpdk_queue_flush__(struct netdev_dpdk *dev, int qid) { struct dpdk_tx_queue *txq = &dev->tx_q[qid]; uint32_t nb_tx; - if (txq->count == 0) { - return; - } - rte_spinlock_lock(&txq->tx_lock); nb_tx = rte_eth_tx_burst(dev->port_id, qid, txq->burst_pkts, txq->count); if (nb_tx != txq->count) { /* free buffers if we couldn't transmit packets */ @@ -585,6 +581,18 @@ dpdk_queue_flush(struct netdev_dpdk *dev, int qid) (txq->count - nb_tx)); } txq->count = 0; +} + +static void +dpdk_queue_flush(struct netdev_dpdk *dev, int qid) +{ + struct dpdk_tx_queue *txq = &dev->tx_q[qid]; + + if (txq->count == 0) { + return; + } + rte_spinlock_lock(&txq->tx_lock); + dpdk_queue_flush__(dev, qid); rte_spinlock_unlock(&txq->tx_lock); } @@ -619,7 +627,6 @@ dpdk_queue_pkts(struct netdev_dpdk *dev, int qid, struct dpdk_tx_queue *txq = &dev->tx_q[qid]; uint64_t diff_tsc; uint64_t cur_tsc; - uint32_t nb_tx; int i = 0; @@ -635,7 +642,7 @@ dpdk_queue_pkts(struct netdev_dpdk *dev, int qid, i += tocopy; if (txq->count == MAX_TX_QUEUE_LEN) { - goto flush; + dpdk_queue_flush__(dev, qid); } cur_tsc = rte_get_timer_cycles(); if (txq->count == 1) { @@ -643,20 +650,8 @@ dpdk_queue_pkts(struct netdev_dpdk *dev, int qid, } diff_tsc = cur_tsc - txq->tsc; if (diff_tsc >= DRAIN_TSC) { - goto flush; - } - continue; - - flush: - nb_tx = rte_eth_tx_burst(dev->port_id, qid, txq->burst_pkts, - txq->count); - if (nb_tx != txq->count) { - /* free buffers if we couldn't transmit packets */ - rte_mempool_put_bulk(dev->dpdk_mp->mp, - (void **) &txq->burst_pkts[nb_tx], - (txq->count - nb_tx)); + dpdk_queue_flush__(dev, qid); } - txq->count = 0; } rte_spinlock_unlock(&txq->tx_lock); } -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev