On Fri, Sep 12, 2014 at 3:04 PM, Alex Wang <al...@nicira.com> wrote: > The previous commit makes OVS create one tx queue for each > cpu core, each pmd thread will use a separate tx queue. > Also, tx of non-pmd threads on dpdk interface is all through > 'NON_PMD_THREAD_TX_QUEUE', protected by the 'nonpmd_mempool_mutex'. > Therefore, the spinlock is no longer needed. And this commit > removes it from 'struct dpdk_tx_queue'. >
This lock is still required since external tools can still change process affinity which can cause race inside OVS. > Signed-off-by: Alex Wang <al...@nicira.com> > > --- > PATCH -> V2 > - rebase and refactor the code. > > V2 -> V3: > - rebase. > > V3 -> V4: > - rebase. > --- > lib/netdev-dpdk.c | 6 ------ > 1 file changed, 6 deletions(-) > > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > index 0fdf874..ef4fe5d 100644 > --- a/lib/netdev-dpdk.c > +++ b/lib/netdev-dpdk.c > @@ -158,7 +158,6 @@ struct dpdk_mp { > /* There should be one 'struct dpdk_tx_queue' created for > * each cpu core. */ > struct dpdk_tx_queue { > - rte_spinlock_t tx_lock; > bool flush_tx; /* Set to true to flush queue everytime */ > /* pkts are queued. */ > int count; > @@ -478,7 +477,6 @@ netdev_dpdk_set_txq(struct netdev_dpdk *netdev, unsigned > int n_txqs) > for (i = 0; i < n_txqs; i++) { > int core_id = ovs_numa_get_numa_id(i); > > - rte_spinlock_init(&netdev->tx_q[i].tx_lock); > /* If the corresponding core is not on the same numa node > * as 'netdev', flags the 'flush_tx'. */ > netdev->tx_q[i].flush_tx = netdev->socket_id == core_id; > @@ -720,9 +718,7 @@ dpdk_queue_flush(struct netdev_dpdk *dev, int qid) > if (txq->count == 0) { > return; > } > - rte_spinlock_lock(&txq->tx_lock); > dpdk_queue_flush__(dev, qid); > - rte_spinlock_unlock(&txq->tx_lock); > } > > static int > @@ -762,7 +758,6 @@ dpdk_queue_pkts(struct netdev_dpdk *dev, int qid, > > int i = 0; > > - rte_spinlock_lock(&txq->tx_lock); > while (i < cnt) { > int freeslots = MAX_TX_QUEUE_LEN - txq->count; > int tocopy = MIN(freeslots, cnt-i); > @@ -781,7 +776,6 @@ dpdk_queue_pkts(struct netdev_dpdk *dev, int qid, > dpdk_queue_flush__(dev, qid); > } > } > - rte_spinlock_unlock(&txq->tx_lock); > } > > /* Tx function. Transmit packets indefinitely */ > -- > 1.7.9.5 > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev