[ovs-dev] [PATCH 1/3] netdev-dpdk: Refactor dpdk_queue_flush().
Ryan Wilson
wryan at nicira.com
Fri Jun 27 00:41:45 UTC 2014
This patch refactors dpdk_queue_flush() to reuse code in
dpdk_queue_pkts().
Signed-off-by: Ryan Wilson <wryan at 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
More information about the dev
mailing list