Hi Pravin
I can't see this on master, and I don't see the changes can you point me to the 
commit.

Thanks
Maryam

> -----Original Message-----
> From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Pravin
> Shelar
> Sent: Thursday, October 16, 2014 11:32 PM
> To: Verbeiren, David
> Cc: dev@openvswitch.org
> Subject: Re: [ovs-dev] [PATCH V2] netdev-dpdk: Fix DPDK rings broken by
> multi queue
> 
> On Tue, Oct 14, 2014 at 10:01 AM, David Verbeiren
> <david.verbei...@intel.com> wrote:
> > DPDK rings don't need one queue per PMD thread and don't support
> > multiple queues (set_multiq function is undefined). To fix operation
> > with DPDK rings, this patch ignores EOPNOTSUPP error on
> > netdev_set_multiq() and provides, for DPDK rings, a netdev send()
> > function that ignores the provided queue id (= PMD thread core id).
> >
> > Signed-off-by: David Verbeiren <david.verbei...@intel.com>
> > Suggested-by: Maryam Tahhan <maryam.tah...@intel.com>
> 
> I added tx lock to protect dpdk rind txq and did couple of cleanups and
> pushed patch to master.
> 
> Thanks,
> Pravin.
> 
> > ---
> > Patch -> V2:
> > - Avoid testing type of netdev in send() by providing a different
> > send() function for DPDK rings, as suggested by Pravin.
> >
> >  lib/dpif-netdev.c |  4 ++--
> >  lib/netdev-dpdk.c | 29 +++++++++++++++++++++++------
> >  2 files changed, 25 insertions(+), 8 deletions(-)
> >
> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index
> > cea7c88..3ec115c 100644
> > --- a/lib/dpif-netdev.c
> > +++ b/lib/dpif-netdev.c
> > @@ -794,7 +794,7 @@ do_add_port(struct dp_netdev *dp, const char
> *devname, const char *type,
> >          /* There can only be ovs_numa_get_n_cores() pmd threads,
> >           * so creates a txq for each. */
> >          error = netdev_set_multiq(netdev, n_cores, dp->n_dpdk_rxqs);
> > -        if (error) {
> > +        if (error && (error != EOPNOTSUPP)) {
> >              VLOG_ERR("%s, cannot set multiq", devname);
> >              return errno;
> >          }
> > @@ -1958,7 +1958,7 @@ dpif_netdev_pmd_set(struct dpif *dpif, unsigned
> int n_rxqs, const char *cmask)
> >                  /* Sets the new rx queue config.  */
> >                  err = netdev_set_multiq(port->netdev, 
> > ovs_numa_get_n_cores(),
> >                                          n_rxqs);
> > -                if (err) {
> > +                if (err && (err != EOPNOTSUPP)) {
> >                      VLOG_ERR("Failed to set dpdk interface %s rx_queue to:"
> >                               " %u", netdev_get_name(port->netdev),
> >                               n_rxqs); diff --git a/lib/netdev-dpdk.c
> > b/lib/netdev-dpdk.c index 9c93768..4d8db84 100644
> > --- a/lib/netdev-dpdk.c
> > +++ b/lib/netdev-dpdk.c
> > @@ -845,8 +845,8 @@ dpdk_do_tx_copy(struct netdev *netdev, int qid,
> struct dpif_packet ** pkts,
> >      }
> >  }
> >
> > -static int
> > -netdev_dpdk_send(struct netdev *netdev, int qid, struct dpif_packet
> > **pkts,
> > +static inline int
> > +netdev_dpdk_send__(struct netdev *netdev, int qid, struct dpif_packet
> > +**pkts,
> >                   int cnt, bool may_steal)  {
> >      struct netdev_dpdk *dev = netdev_dpdk_cast(netdev); @@ -900,6
> > +900,13 @@ netdev_dpdk_send(struct netdev *netdev, int qid, struct
> > dpif_packet **pkts,  }
> >
> >  static int
> > +netdev_dpdk_eth_send(struct netdev *netdev, int qid, struct
> dpif_packet **pkts,
> > +                 int cnt, bool may_steal) {
> > +    netdev_dpdk_send__(netdev, qid, pkts, cnt, may_steal); }
> > +
> > +static int
> >  netdev_dpdk_set_etheraddr(struct netdev *netdev,
> >                            const uint8_t mac[ETH_ADDR_LEN])  { @@
> > -1355,6 +1362,14 @@ dpdk_ring_open(const char dev_name[], unsigned
> int
> > *eth_port_id) OVS_REQUIRES(dp  }
> >
> >  static int
> > +netdev_dpdk_ring_send(struct netdev *netdev, int qid, struct
> dpif_packet **pkts,
> > +                 int cnt, bool may_steal) {
> > +    netdev_dpdk_send__(netdev, 0 /* DPDK Rings have a single TX queue
> */,
> > +                        pkts, cnt, may_steal); }
> > +
> > +static int
> >  netdev_dpdk_ring_construct(struct netdev *netdev)  {
> >      unsigned int port_no = 0;
> > @@ -1378,7 +1393,7 @@ unlock_dpdk:
> >      return err;
> >  }
> >
> > -#define NETDEV_DPDK_CLASS(NAME, INIT, CONSTRUCT, MULTIQ)      \
> > +#define NETDEV_DPDK_CLASS(NAME, INIT, CONSTRUCT, MULTIQ, SEND)
> \
> >  {                                                             \
> >      NAME,                                                     \
> >      INIT,                       /* init */                    \
> > @@ -1395,7 +1410,7 @@ unlock_dpdk:
> >      netdev_dpdk_get_numa_id,    /* get_numa_id */             \
> >      MULTIQ,                     /* set_multiq */              \
> >                                                                \
> > -    netdev_dpdk_send,           /* send */                    \
> > +    SEND,                       /* send */                    \
> >      NULL,                       /* send_wait */               \
> >                                                                \
> >      netdev_dpdk_set_etheraddr,                                \
> > @@ -1481,14 +1496,16 @@ const struct netdev_class dpdk_class =
> >          "dpdk",
> >          dpdk_class_init,
> >          netdev_dpdk_construct,
> > -        netdev_dpdk_set_multiq);
> > +        netdev_dpdk_set_multiq,
> > +        netdev_dpdk_eth_send);
> >
> >  const struct netdev_class dpdk_ring_class =
> >      NETDEV_DPDK_CLASS(
> >          "dpdkr",
> >          NULL,
> >          netdev_dpdk_ring_construct,
> > -        NULL);
> > +        NULL,
> > +        netdev_dpdk_ring_send);
> >
> >  void
> >  netdev_dpdk_register(void)
> > --
> > 1.8.3.2
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to