From: Daniel Mrzyglod Date: Tue, 8 Jul 2014 11:16:24 +0000 (+0100) Subject: examples/l3fwd-vf: fix race condition X-Git-Tag: spdx-start~9950 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=c062d3eb71e1a0026256d651d1ff7fcbbc03a2e5;p=dpdk.git 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 --- 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]);