From c062d3eb71e1a0026256d651d1ff7fcbbc03a2e5 Mon Sep 17 00:00:00 2001 From: Daniel Mrzyglod Date: Tue, 8 Jul 2014 12:16:24 +0100 Subject: [PATCH] examples/l3fwd-vf: fix race condition When the routing is through the same queue, the app crashed. Signed-off-by: Daniel Mrzyglod Acked-by: Neil Horman --- examples/l3fwd-vf/main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/l3fwd-vf/main.c b/examples/l3fwd-vf/main.c index 59a7907c26..7cc7228d62 100644 --- a/examples/l3fwd-vf/main.c +++ b/examples/l3fwd-vf/main.c @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -302,7 +303,7 @@ struct lcore_conf { } __rte_cache_aligned; static struct lcore_conf lcore_conf[RTE_MAX_LCORE]; - +static rte_spinlock_t spinlock_conf[RTE_MAX_ETHPORTS] = {RTE_SPINLOCK_INITIALIZER}; /* Send burst of packets on an output interface */ static inline int send_burst(struct lcore_conf *qconf, uint16_t n, uint8_t port) @@ -314,7 +315,10 @@ send_burst(struct lcore_conf *qconf, uint16_t n, uint8_t port) queueid = qconf->tx_queue_id; m_table = (struct rte_mbuf **)qconf->tx_mbufs[port].m_table; + rte_spinlock_lock(&spinlock_conf[port]); ret = rte_eth_tx_burst(port, queueid, m_table, n); + rte_spinlock_unlock(&spinlock_conf[port]); + if (unlikely(ret < n)) { do { rte_pktmbuf_free(m_table[ret]); -- 2.20.1