Actually I forgot to push it to master back then. So I did it now. Thanks for pointing it out.
On Tue, Nov 4, 2014 at 7:34 AM, Tahhan, Maryam <maryam.tah...@intel.com> wrote: > 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