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

Reply via email to