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