DPDK patches and discussions
 help / color / mirror / Atom feed
From: Nipun Gupta <nipun.gupta@nxp.com>
To: Aaron Conole <aconole@redhat.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	"jerinj@marvell.com" <jerinj@marvell.com>,
	 "pbhagavatula@marvell.com" <pbhagavatula@marvell.com>,
	"skori@marvell.com" <skori@marvell.com>,
	Hemant Agrawal <hemant.agrawal@nxp.com>,
	"bruce.richardson@intel.com" <bruce.richardson@intel.com>,
	"marko.kovacevic@intel.com" <marko.kovacevic@intel.com>,
	"orika@mellanox.com" <orika@mellanox.com>,
	"radu.nicolau@intel.com" <radu.nicolau@intel.com>,
	"tomasz.kantecki@intel.com" <tomasz.kantecki@intel.com>,
	"harry.van.haaren@intel.com" <harry.van.haaren@intel.com>,
	"nikhil.rao@intel.com" <nikhil.rao@intel.com>
Subject: Re: [dpdk-dev] [PATCH] eventdev: flag to identify same destined packets enqueue
Date: Tue, 1 Oct 2019 15:15:59 +0000	[thread overview]
Message-ID: <VI1PR04MB44808CFDC81E31D4D5165DDCE69D0@VI1PR04MB4480.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <f7tr23wplwt.fsf@dhcp-25.97.bos.redhat.com>



> -----Original Message-----
> From: Aaron Conole <aconole@redhat.com>
> Sent: Tuesday, October 1, 2019 8:12 PM
> To: Nipun Gupta <nipun.gupta@nxp.com>
> Cc: dev@dpdk.org; jerinj@marvell.com; pbhagavatula@marvell.com;
> skori@marvell.com; Hemant Agrawal <hemant.agrawal@nxp.com>;
> bruce.richardson@intel.com; marko.kovacevic@intel.com;
> orika@mellanox.com; radu.nicolau@intel.com; tomasz.kantecki@intel.com;
> harry.van.haaren@intel.com; nikhil.rao@intel.com
> Subject: Re: [dpdk-dev] [PATCH] eventdev: flag to identify same destined
> packets enqueue
> 
> Nipun Gupta <nipun.gupta@nxp.com> writes:
> 
> > This patch introduces a `flag` in the Eth TX adapter enqueue API.
> > Some drivers may support burst functionality only with the packets
> > having same destination device and queue.
> >
> > The flag `RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST` can be
> used
> > to indicate this so the underlying driver, for drivers to utilize
> > burst functionality appropriately.
> >
> > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
> > ---
> 
> In addition to the ABI concerns (which I mirror), you also should
> compile test this patch.  It currently doesn't build (for example, see a
> missed adapter_enqueue in
> examples/eventdev_pipeline/pipeline_worker_tx.c)

Thanks for letting me know. I missed compiling the example. Will fix in v2.

w.r.t. the ABI change, as API will freeze for 1 year post this we expect to get some
exception to deprecation process for 19.11.

> 
> >  app/test-eventdev/test_pipeline_common.h          |  6 +++---
> >  .../prog_guide/event_ethernet_tx_adapter.rst      |  3 ++-
> >  drivers/event/octeontx/ssovf_evdev.h              |  2 +-
> >  drivers/event/octeontx/ssovf_worker.c             |  3 ++-
> >  drivers/event/octeontx2/otx2_evdev.h              | 12 ++++++++----
> >  drivers/event/octeontx2/otx2_worker.c             |  8 ++++++--
> >  drivers/event/octeontx2/otx2_worker_dual.c        |  8 ++++++--
> >  lib/librte_eventdev/rte_event_eth_tx_adapter.h    | 15 +++++++++++++-
> -
> >  lib/librte_eventdev/rte_eventdev.c                |  3 ++-
> >  lib/librte_eventdev/rte_eventdev.h                |  2 +-
> >  10 files changed, 44 insertions(+), 18 deletions(-)
> >
> > diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-
> eventdev/test_pipeline_common.h
> > index 0440b9e29..6e73c6ab2 100644
> > --- a/app/test-eventdev/test_pipeline_common.h
> > +++ b/app/test-eventdev/test_pipeline_common.h
> > @@ -106,7 +106,7 @@ pipeline_event_tx(const uint8_t dev, const uint8_t
> port,
> >  		struct rte_event * const ev)
> >  {
> >  	rte_event_eth_tx_adapter_txq_set(ev->mbuf, 0);
> > -	while (!rte_event_eth_tx_adapter_enqueue(dev, port, ev, 1))
> > +	while (!rte_event_eth_tx_adapter_enqueue(dev, port, ev, 1, 0))
> >  		rte_pause();
> >  }
> >
> > @@ -116,10 +116,10 @@ pipeline_event_tx_burst(const uint8_t dev, const
> uint8_t port,
> >  {
> >  	uint16_t enq;
> >
> > -	enq = rte_event_eth_tx_adapter_enqueue(dev, port, ev, nb_rx);
> > +	enq = rte_event_eth_tx_adapter_enqueue(dev, port, ev, nb_rx, 0);
> >  	while (enq < nb_rx) {
> >  		enq += rte_event_eth_tx_adapter_enqueue(dev, port,
> > -				ev + enq, nb_rx - enq);
> > +				ev + enq, nb_rx - enq, 0);
> >  	}
> >  }
> >
> > diff --git a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst
> b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst
> > index 192f9e1cf..a8c13e136 100644
> > --- a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst
> > +++ b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst
> > @@ -137,11 +137,12 @@ should use the ``rte_event_enqueue_burst()``
> function.
> >  	if (cap & RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT) {
> >
> >  		event.mbuf = m;
> > +		eq_flags = 0;
> >
> >  		m->port = tx_port;
> >  		rte_event_eth_tx_adapter_txq_set(m, tx_queue_id);
> >
> > -		rte_event_eth_tx_adapter_enqueue(dev_id, ev_port,
> &event, 1);
> > +		rte_event_eth_tx_adapter_enqueue(dev_id, ev_port,
> &event, 1, eq_flags);
> >  	} else {
> >
> >  		event.queue_id = qid; /* event queue linked to adapter port
> */
> > diff --git a/drivers/event/octeontx/ssovf_evdev.h
> b/drivers/event/octeontx/ssovf_evdev.h
> > index 0e622152c..1b156edab 100644
> > --- a/drivers/event/octeontx/ssovf_evdev.h
> > +++ b/drivers/event/octeontx/ssovf_evdev.h
> > @@ -181,7 +181,7 @@ void ssows_flush_events(struct ssows *ws, uint8_t
> queue_id,
> >  		ssows_handle_event_t fn, void *arg);
> >  void ssows_reset(struct ssows *ws);
> >  uint16_t sso_event_tx_adapter_enqueue(void *port,
> > -		struct rte_event ev[], uint16_t nb_events);
> > +		struct rte_event ev[], uint16_t nb_events, uint8_t eq_flags);
> >  int ssovf_info(struct ssovf_info *info);
> >  void *ssovf_bar(enum ssovf_type, uint8_t id, uint8_t bar);
> >  int test_eventdev_octeontx(void);
> > diff --git a/drivers/event/octeontx/ssovf_worker.c
> b/drivers/event/octeontx/ssovf_worker.c
> > index d940b5dd6..1d0467af3 100644
> > --- a/drivers/event/octeontx/ssovf_worker.c
> > +++ b/drivers/event/octeontx/ssovf_worker.c
> > @@ -264,7 +264,7 @@ ssows_reset(struct ssows *ws)
> >
> >  uint16_t
> >  sso_event_tx_adapter_enqueue(void *port,
> > -		struct rte_event ev[], uint16_t nb_events)
> > +		struct rte_event ev[], uint16_t nb_events, uint8_t eq_flags)
> >  {
> >  	uint16_t port_id;
> >  	uint16_t queue_id;
> > @@ -275,6 +275,7 @@ sso_event_tx_adapter_enqueue(void *port,
> >  	octeontx_dq_t *dq;
> >
> >  	RTE_SET_USED(nb_events);
> > +	RTE_SET_USED(eq_flags);
> >  	switch (ev->sched_type) {
> >  	case SSO_SYNC_ORDERED:
> >  		ssows_swtag_norm(ws, ev->event, SSO_SYNC_ATOMIC);
> > diff --git a/drivers/event/octeontx2/otx2_evdev.h
> b/drivers/event/octeontx2/otx2_evdev.h
> > index 5cd80e3b2..74b749a15 100644
> > --- a/drivers/event/octeontx2/otx2_evdev.h
> > +++ b/drivers/event/octeontx2/otx2_evdev.h
> > @@ -333,16 +333,20 @@ SSO_RX_ADPTR_ENQ_FASTPATH_FUNC
> >
> >  #define T(name, f4, f3, f2, f1, f0, sz, flags)				     \
> >  uint16_t otx2_ssogws_tx_adptr_enq_ ## name(void *port, struct
> rte_event ev[],\
> > -					   uint16_t nb_events);		     \
> > +					   uint16_t nb_events,		     \
> > +					   uint8_t eq_flags);		     \
> >  uint16_t otx2_ssogws_tx_adptr_enq_seg_ ## name(void *port,
> 	     \
> >  					       struct rte_event ev[],	     \
> > -					       uint16_t nb_events);	     \
> > +					       uint16_t nb_events,	     \
> > +					       uint8_t eq_flags);	     \
> >  uint16_t otx2_ssogws_dual_tx_adptr_enq_ ## name(void *port,
> 	     \
> >  						struct rte_event ev[],	     \
> > -						uint16_t nb_events);	     \
> > +						uint16_t nb_events,	     \
> > +						uint8_t eq_flags);	     \
> >  uint16_t otx2_ssogws_dual_tx_adptr_enq_seg_ ## name(void *port,
> 		     \
> >  						    struct rte_event ev[],   \
> > -						    uint16_t nb_events);     \
> > +						    uint16_t nb_events,	     \
> > +						    uint8_t eq_flags);	     \
> >
> >  SSO_TX_ADPTR_ENQ_FASTPATH_FUNC
> >  #undef T
> > diff --git a/drivers/event/octeontx2/otx2_worker.c
> b/drivers/event/octeontx2/otx2_worker.c
> > index cd14cd3d2..100e21669 100644
> > --- a/drivers/event/octeontx2/otx2_worker.c
> > +++ b/drivers/event/octeontx2/otx2_worker.c
> > @@ -270,12 +270,14 @@ otx2_ssogws_enq_fwd_burst(void *port, const
> struct rte_event ev[],
> >  #define T(name, f4, f3, f2, f1, f0, sz, flags)				\
> >  uint16_t __hot
> 	\
> >  otx2_ssogws_tx_adptr_enq_ ## name(void *port, struct rte_event ev[],
> 	\
> > -				  uint16_t nb_events)			\
> > +				  uint16_t nb_events,			\
> > +				  uint8_t eq_flags)			\
> >  {									\
> >  	struct otx2_ssogws *ws = port;					\
> >  	uint64_t cmd[sz];						\
> >  									\
> >  	RTE_SET_USED(nb_events);					\
> > +	RTE_SET_USED(eq_flags);
> 	\
> >  	return otx2_ssogws_event_tx(ws, ev, cmd, flags);		\
> >  }
> >  SSO_TX_ADPTR_ENQ_FASTPATH_FUNC
> > @@ -284,12 +286,14 @@ SSO_TX_ADPTR_ENQ_FASTPATH_FUNC
> >  #define T(name, f4, f3, f2, f1, f0, sz, flags)				\
> >  uint16_t __hot
> 	\
> >  otx2_ssogws_tx_adptr_enq_seg_ ## name(void *port, struct rte_event
> ev[],\
> > -				      uint16_t nb_events)		\
> > +				      uint16_t nb_events,		\
> > +				      uint8_t eq_flags)			\
> >  {									\
> >  	struct otx2_ssogws *ws = port;					\
> >  	uint64_t cmd[(sz) + NIX_TX_MSEG_SG_DWORDS - 2];
> 	\
> >  									\
> >  	RTE_SET_USED(nb_events);					\
> > +	RTE_SET_USED(eq_flags);
> 	\
> >  	return otx2_ssogws_event_tx(ws, ev, cmd, (flags) |		\
> >  				    NIX_TX_MULTI_SEG_F);		\
> >  }
> > diff --git a/drivers/event/octeontx2/otx2_worker_dual.c
> b/drivers/event/octeontx2/otx2_worker_dual.c
> > index 37c274a54..c3e48da42 100644
> > --- a/drivers/event/octeontx2/otx2_worker_dual.c
> > +++ b/drivers/event/octeontx2/otx2_worker_dual.c
> > @@ -310,7 +310,8 @@ SSO_RX_ADPTR_ENQ_FASTPATH_FUNC
> >  uint16_t __hot
> 	\
> >  otx2_ssogws_dual_tx_adptr_enq_ ## name(void *port,
> 	\
> >  				       struct rte_event ev[],		\
> > -				       uint16_t nb_events)		\
> > +				       uint16_t nb_events,		\
> > +				       uint8_t eq_flags)		\
> >  {									\
> >  	struct otx2_ssogws_dual *ws = port;				\
> >  	struct otx2_ssogws *vws =					\
> > @@ -318,6 +319,7 @@ otx2_ssogws_dual_tx_adptr_enq_ ## name(void
> *port,			\
> >  	uint64_t cmd[sz];						\
> >  									\
> >  	RTE_SET_USED(nb_events);					\
> > +	RTE_SET_USED(eq_flags);
> 	\
> >  	return otx2_ssogws_event_tx(vws, ev, cmd, flags);		\
> >  }
> >  SSO_TX_ADPTR_ENQ_FASTPATH_FUNC
> > @@ -327,7 +329,8 @@ SSO_TX_ADPTR_ENQ_FASTPATH_FUNC
> >  uint16_t __hot
> 	\
> >  otx2_ssogws_dual_tx_adptr_enq_seg_ ## name(void *port,
> 		\
> >  					   struct rte_event ev[],	\
> > -					   uint16_t nb_events)		\
> > +					   uint16_t nb_events,		\
> > +					   uint8_t eq_flags)		\
> >  {									\
> >  	struct otx2_ssogws_dual *ws = port;				\
> >  	struct otx2_ssogws *vws =					\
> > @@ -335,6 +338,7 @@ otx2_ssogws_dual_tx_adptr_enq_seg_ ##
> name(void *port,			\
> >  	uint64_t cmd[(sz) + NIX_TX_MSEG_SG_DWORDS - 2];
> 	\
> >  									\
> >  	RTE_SET_USED(nb_events);					\
> > +	RTE_SET_USED(eq_flags);
> 	\
> >  	return otx2_ssogws_event_tx(vws, ev, cmd, (flags) |		\
> >  				    NIX_TX_MULTI_SEG_F);		\
> >  }
> > diff --git a/lib/librte_eventdev/rte_event_eth_tx_adapter.h
> b/lib/librte_eventdev/rte_event_eth_tx_adapter.h
> > index c848261c4..98be77568 100644
> > --- a/lib/librte_eventdev/rte_event_eth_tx_adapter.h
> > +++ b/lib/librte_eventdev/rte_event_eth_tx_adapter.h
> > @@ -300,6 +300,11 @@ rte_event_eth_tx_adapter_txq_get(struct
> rte_mbuf *pkt)
> >  int
> >  rte_event_eth_tx_adapter_event_port_get(uint8_t id, uint8_t
> *event_port_id);
> >
> > +#define RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST	0x1
> > +/**< This flag is used when all the packets enqueued in the tx adapter are
> > + * destined for the same Ethernet device, queue pair.
> > + */
> > +
> >  /**
> >   * Enqueue a burst of events objects or an event object supplied in
> *rte_event*
> >   * structure on an  event device designated by its *dev_id* through the
> event
> > @@ -324,6 +329,10 @@
> rte_event_eth_tx_adapter_event_port_get(uint8_t id, uint8_t
> *event_port_id);
> >   *  The number of event objects to enqueue, typically number of
> >   *  rte_event_port_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...)
> >   *  available for this port.
> > + * @param flags
> > + *  See RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_ flags.
> > + *  #RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST signifies that
> all the packets
> > + *  which are enqueued are destined for the same Ethernet device, queue
> pair.
> >   *
> >   * @return
> >   *   The number of event objects actually enqueued on the event device.
> The
> > @@ -343,7 +352,8 @@ static inline uint16_t
> >  rte_event_eth_tx_adapter_enqueue(uint8_t dev_id,
> >  				uint8_t port_id,
> >  				struct rte_event ev[],
> > -				uint16_t nb_events)
> > +				uint16_t nb_events,
> > +				uint8_t flags)
> >  {
> >  	const struct rte_eventdev *dev = &rte_eventdevs[dev_id];
> >
> > @@ -359,7 +369,8 @@ rte_event_eth_tx_adapter_enqueue(uint8_t
> dev_id,
> >  		return 0;
> >  	}
> >  #endif
> > -	return dev->txa_enqueue(dev->data->ports[port_id], ev,
> nb_events);
> > +	return dev->txa_enqueue(dev->data->ports[port_id], ev,
> > +				nb_events, flags);
> >  }
> >
> >  /**
> > diff --git a/lib/librte_eventdev/rte_eventdev.c
> b/lib/librte_eventdev/rte_eventdev.c
> > index f44c869cb..3bf9d7115 100644
> > --- a/lib/librte_eventdev/rte_eventdev.c
> > +++ b/lib/librte_eventdev/rte_eventdev.c
> > @@ -1324,7 +1324,8 @@ rte_eventdev_find_free_device_index(void)
> >  static uint16_t
> >  rte_event_tx_adapter_enqueue(__rte_unused void *port,
> >  			__rte_unused struct rte_event ev[],
> > -			__rte_unused uint16_t nb_events)
> > +			__rte_unused uint16_t nb_events,
> > +			__rte_unused uint8_t flags)
> >  {
> >  	rte_errno = ENOTSUP;
> >  	return 0;
> > diff --git a/lib/librte_eventdev/rte_eventdev.h
> b/lib/librte_eventdev/rte_eventdev.h
> > index 5044a13d0..2a5643da3 100644
> > --- a/lib/librte_eventdev/rte_eventdev.h
> > +++ b/lib/librte_eventdev/rte_eventdev.h
> > @@ -1227,7 +1227,7 @@ typedef uint16_t
> (*event_dequeue_burst_t)(void *port, struct rte_event ev[],
> >  /**< @internal Dequeue burst of events from port of a device */
> >
> >  typedef uint16_t (*event_tx_adapter_enqueue)(void *port,
> > -				struct rte_event ev[], uint16_t nb_events);
> > +		struct rte_event ev[], uint16_t nb_events, uint8_t flags);
> >  /**< @internal Enqueue burst of events on port of a device */
> >
> >  #define RTE_EVENTDEV_NAME_MAX_LEN	(64)

  reply	other threads:[~2019-10-01 15:16 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-01  6:46 Nipun Gupta
2019-10-01  7:44 ` Jerin Jacob
2019-10-01 11:41   ` Nipun Gupta
2019-10-01 13:09     ` Jerin Jacob
2019-10-01 14:02       ` Nipun Gupta
2019-10-01 14:20         ` Jerin Jacob
2019-10-01 15:06           ` Nipun Gupta
2019-10-01 15:35             ` Jerin Jacob
2019-10-02  3:08               ` Hemant Agrawal
2019-10-02  7:54                 ` Jerin Jacob
2019-10-03  6:12                   ` Rao, Nikhil
2019-10-03  6:45                     ` Hemant Agrawal
2019-10-03 10:26                       ` Jerin Jacob
2019-10-21 11:35                         ` Rao, Nikhil
2019-10-22  8:45                           ` Jerin Jacob
2019-10-22  9:42                             ` Rao, Nikhil
2019-10-23  4:53                               ` Jerin Jacob
2019-10-01 14:42 ` Aaron Conole
2019-10-01 15:15   ` Nipun Gupta [this message]
2019-10-04  6:55 ` [dpdk-dev] [PATCH v2] " Nipun Gupta
2019-10-04  8:21   ` Jerin Jacob
2019-10-04 10:47 ` [dpdk-dev] [PATCH v3] " Nipun Gupta
2019-10-05 16:23   ` Jerin Jacob
2019-10-09  7:32 ` [dpdk-dev] [PATCH v4] " Nipun Gupta
2019-10-10 10:06   ` Rao, Nikhil
2019-10-10 12:43     ` Nipun Gupta
2019-10-11  6:14       ` Jerin Jacob
2019-10-11 13:03 ` [dpdk-dev] [PATCH v5] " Nipun Gupta
2019-10-16  6:41   ` Hemant Agrawal
2019-10-16  7:19   ` Jerin Jacob

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=VI1PR04MB44808CFDC81E31D4D5165DDCE69D0@VI1PR04MB4480.eurprd04.prod.outlook.com \
    --to=nipun.gupta@nxp.com \
    --cc=aconole@redhat.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=harry.van.haaren@intel.com \
    --cc=hemant.agrawal@nxp.com \
    --cc=jerinj@marvell.com \
    --cc=marko.kovacevic@intel.com \
    --cc=nikhil.rao@intel.com \
    --cc=orika@mellanox.com \
    --cc=pbhagavatula@marvell.com \
    --cc=radu.nicolau@intel.com \
    --cc=skori@marvell.com \
    --cc=tomasz.kantecki@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).