All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Eads, Gage" <gage.eads@intel.com>
To: "Richardson, Bruce" <bruce.richardson@intel.com>,
	'Jerin Jacob' <jerin.jacob@caviumnetworks.com>,
	"'dev@dpdk.org'" <dev@dpdk.org>
Cc: "'thomas.monjalon@6wind.com'" <thomas.monjalon@6wind.com>,
	"'hemant.agrawal@nxp.com'" <hemant.agrawal@nxp.com>,
	"Van Haaren, Harry" <harry.van.haaren@intel.com>,
	"McDaniel, Timothy" <timothy.mcdaniel@intel.com>
Subject: Re: [PATCH v4 1/6] eventdev: introduce event driven programming model
Date: Wed, 25 Jan 2017 22:36:21 +0000	[thread overview]
Message-ID: <9184057F7FC11744A2107296B6B8EB1E01E5F3D3@FMSMSX108.amr.corp.intel.com> (raw)
In-Reply-To: <9184057F7FC11744A2107296B6B8EB1E01E5F0AC@FMSMSX108.amr.corp.intel.com>



>  -----Original Message-----
>  From: Eads, Gage
>  Sent: Wednesday, January 25, 2017 10:54 AM
>  To: Richardson, Bruce <bruce.richardson@intel.com>; Jerin Jacob
>  <jerin.jacob@caviumnetworks.com>; dev@dpdk.org
>  Cc: thomas.monjalon@6wind.com; hemant.agrawal@nxp.com; Van Haaren,
>  Harry <harry.van.haaren@intel.com>; McDaniel, Timothy
>  <timothy.mcdaniel@intel.com>
>  Subject: RE: [dpdk-dev] [PATCH v4 1/6] eventdev: introduce event driven
>  programming model
>  
>  
>  
>  >  -----Original Message-----
>  >  From: Richardson, Bruce
>  >  Sent: Wednesday, January 25, 2017 10:36 AM
>  >  To: Eads, Gage <gage.eads@intel.com>; Jerin Jacob
>  > <jerin.jacob@caviumnetworks.com>; dev@dpdk.org
>  >  Cc: thomas.monjalon@6wind.com; hemant.agrawal@nxp.com; Van Haaren,
>  > Harry <harry.van.haaren@intel.com>; McDaniel, Timothy
>  > <timothy.mcdaniel@intel.com>
>  >  Subject: RE: [dpdk-dev] [PATCH v4 1/6] eventdev: introduce event
>  > driven  programming model
>  >
>  >
>  >
>  >  > -----Original Message-----
>  >  > From: Eads, Gage
>  >  > Sent: Wednesday, January 25, 2017 4:32 PM  > To: Jerin Jacob
>  > <jerin.jacob@caviumnetworks.com>; dev@dpdk.org  > Cc:
>  > thomas.monjalon@6wind.com; Richardson, Bruce  >
>  > <bruce.richardson@intel.com>; hemant.agrawal@nxp.com; Van Haaren,  >
>  > Harry <harry.van.haaren@intel.com>; McDaniel, Timothy  >
>  > <timothy.mcdaniel@intel.com>  > Subject: RE: [dpdk-dev] [PATCH v4 1/6]
>  > eventdev: introduce event  > driven programming model  >  > Hi Jerin,
>  > >  > See the bottom of this email for a proposed tweak to the  >
>  > rte_event_enqueue_burst() return value.
>  >  >
>  >  > >  -----Original Message-----
>  >  > >  From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
>  >  > >  Sent: Wednesday, December 21, 2016 3:25 AM  > >  To:
>  > dev@dpdk.org  > >  Cc: thomas.monjalon@6wind.com; Richardson, Bruce  >
>  > > <bruce.richardson@intel.com>; hemant.agrawal@nxp.com; Eads, Gage  >
>  > > <gage.eads@intel.com>; Van Haaren, Harry  > >
>  > <harry.van.haaren@intel.com>; Jerin Jacob  > >
>  > <jerin.jacob@caviumnetworks.com>  > >  Subject: [dpdk-dev] [PATCH v4
>  > 1/6] eventdev: introduce event driven  > > programming model  > >
>  > <message truncated for brevity>  > >  +/**  > >  + * 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  + * port specified by *port_id*. Each
>  > event  > > object specifies the event queue on  + * which it will be
>  > enqueued.
>  >  > >  + *
>  >  > >  + * The *nb_events* parameter is the number of event objects to
>  > > > enqueue  which are  + * supplied in the *ev* array of *rte_event*
>  > > > structure.
>  >  > >  + *
>  >  > >  + * The rte_event_enqueue_burst() function returns the number of
>  > +  > > * events objects it actually enqueued. A return value equal to
>  > > > *nb_events*  + * means that all event objects have been enqueued.
>  >  > >  + *
>  >  > >  + * @param dev_id
>  >  > >  + *   The identifier of the device.
>  >  > >  + * @param port_id
>  >  > >  + *   The identifier of the event port.
>  >  > >  + * @param ev
>  >  > >  + *   Points to an array of *nb_events* objects of type *rte_event*
>  >  > structure
>  >  > >  + *   which contain the event object enqueue operations to be
>  >  > processed.
>  >  > >  + * @param nb_events
>  >  > >  + *   The number of event objects to enqueue, typically number of
>  >  > >  + *   rte_event_port_enqueue_depth() available for this port.
>  >  > >  + *
>  >  > >  + * @return
>  >  > >  + *   The number of event objects actually enqueued on the event
>  >  > device. The
>  >  > >  + *   return value can be less than the value of the *nb_events*
>  >  > parameter
>  >  > >  when
>  >  > >  + *   the event devices queue is full or if invalid parameters are
>  >  > specified in a
>  >  > >  + *   *rte_event*. If return value is less than *nb_events*, the
>  >  > remaining events
>  >  > >  + *   at the end of ev[] are not consumed,and the caller has to take
>  >  > care of
>  >  > >  them
>  >  > >  + *
>  >  > >  + * @see rte_event_port_enqueue_depth()  + */  +uint16_t  > >
>  > +rte_event_enqueue_burst(uint8_t dev_id, uint8_t port_id,
>  >  > >  +			const struct rte_event ev[], uint16_t nb_events);
>  >  >
>  >  > There are a number of reasons this operation could fail to enqueue
>  > all  > the events, including:
>  >  > - Backpressure
>  >  > - Invalid port ID
>  >  > - Invalid queue ID
>  >  > - Invalid sched type when a queue is configured for ATOMIC_ONLY,  >
>  > ORDERED_ONLY, or PARALLEL_ONLY  > - ...
>  >  >
>  >  > The current API doesn't provide a straightforward way to determine
>  > the  > cause of a failure. This is a particular issue on event PMDs
>  > that can  > backpressure, where the app may want to treat that case
>  > differently  > than the other failure cases.
>  >  >
>  >  > Could we change the return type to int16_t, and define a set of
>  > error  > cases (e.g. -ENOSPC for backpressure, -EINVAL for an invalid
>  argument)?
>  >  > (With corresponding changes needed in the PMD API) Similarly we
>  > could  > change rte_event_dequeue_burst() to return an int16_t, with
>  > -EINVAL as  > a possible error case.
>  >
>  >  Use rte_errno instead, I suggest. That's what it's there for.
>  >
>  >  /Bruce
>  
>  That makes sense. In that case, the API comment could be tweaked like so:
>  
>    * If the return value is less than *nb_events*, the remaining events at the
>    * end of ev[] are not consumed and the caller has to take care of them, and
>    * rte_errno is set accordingly. Possible errno values include:
>    * - EINVAL - The port ID is invalid, an event's queue ID is invalid, or an
>    *            event's sched type doesn't match the capabilities of the
>    *            destination queue.
>    * - ENOSPC - The event port was backpressured and unable to enqueue one or
>    *            more events.

However it seems better to use a signed integer for the dequeue burst return value, if it is to use rte_errno. Application code could be simplified:

(signed return value)
ret = rte_event_dequeue_burst(...);
if (ret < 0)
    rte_panic("Dequeued returned errno %d\n", rte_errno);

vs.

(unsigned return value)
ret = rte_event_dequeue_burst(...);
if (ret == 0 && rte_errno != 0)
    rte_panic("Dequeued returned errno %d\n", rte_errno);

And with an unsigned return value, all dequeue implementations would have to clear rte_errno when no events are dequeued.

Thanks,
Gage

  reply	other threads:[~2017-01-25 22:36 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-18  5:44 [PATCH 0/4] libeventdev API and northbound implementation Jerin Jacob
2016-11-18  5:44 ` [PATCH 1/4] eventdev: introduce event driven programming model Jerin Jacob
2016-11-23 18:39   ` Thomas Monjalon
2016-11-24  1:59     ` Jerin Jacob
2016-11-24 12:26       ` Bruce Richardson
2016-11-24 15:35       ` Thomas Monjalon
2016-11-25  0:23         ` Jerin Jacob
2016-11-25 11:00           ` Bruce Richardson
2016-11-25 13:09             ` Thomas Monjalon
2016-11-26  0:57               ` Jerin Jacob
2016-11-28  9:10                 ` Bruce Richardson
2016-11-26  2:54             ` Jerin Jacob
2016-11-28  9:16               ` Bruce Richardson
2016-11-28 11:30                 ` Thomas Monjalon
2016-11-29  4:01                 ` Jerin Jacob
2016-11-29 10:00                   ` Bruce Richardson
2016-11-25 11:59           ` Van Haaren, Harry
2016-11-25 12:09             ` Richardson, Bruce
2016-11-24 16:24   ` Bruce Richardson
2016-11-24 19:30     ` Jerin Jacob
2016-12-06  3:52   ` [PATCH v2 0/6] libeventdev API and northbound implementation Jerin Jacob
2016-12-06  3:52     ` [PATCH v2 1/6] eventdev: introduce event driven programming model Jerin Jacob
2016-12-06 16:51       ` Bruce Richardson
2016-12-07 18:53         ` Jerin Jacob
2016-12-08  9:30           ` Bruce Richardson
2016-12-08 20:41             ` Jerin Jacob
2016-12-09 15:11               ` Bruce Richardson
2016-12-14  6:55                 ` Jerin Jacob
2016-12-07 10:57       ` Van Haaren, Harry
2016-12-08  1:24         ` Jerin Jacob
2016-12-08 11:02           ` Van Haaren, Harry
2016-12-14 13:13             ` Jerin Jacob
2016-12-14 15:15               ` Bruce Richardson
2016-12-15 16:54               ` Van Haaren, Harry
2016-12-07 11:12       ` Bruce Richardson
2016-12-08  1:48         ` Jerin Jacob
2016-12-08  9:57           ` Bruce Richardson
2016-12-14  6:40             ` Jerin Jacob
2016-12-14 15:19       ` Bruce Richardson
2016-12-15 13:39         ` Jerin Jacob
2016-12-06  3:52     ` [PATCH v2 2/6] eventdev: define southbound driver interface Jerin Jacob
2016-12-06  3:52     ` [PATCH v2 3/6] eventdev: implement the northbound APIs Jerin Jacob
2016-12-06 17:17       ` Bruce Richardson
2016-12-07 17:02         ` Jerin Jacob
2016-12-08  9:59           ` Bruce Richardson
2016-12-14  6:28             ` Jerin Jacob
2016-12-06  3:52     ` [PATCH v2 4/6] eventdev: implement PMD registration functions Jerin Jacob
2016-12-06  3:52     ` [PATCH v2 5/6] event/skeleton: add skeleton eventdev driver Jerin Jacob
2016-12-06  3:52     ` [PATCH v2 6/6] app/test: unit test case for eventdev APIs Jerin Jacob
2016-12-06 16:46     ` [PATCH v2 0/6] libeventdev API and northbound implementation Bruce Richardson
2016-12-21  9:25     ` [PATCH v4 " Jerin Jacob
2016-12-21  9:25       ` [PATCH v4 1/6] eventdev: introduce event driven programming model Jerin Jacob
2017-01-25 16:32         ` Eads, Gage
2017-01-25 16:36           ` Richardson, Bruce
2017-01-25 16:53             ` Eads, Gage
2017-01-25 22:36               ` Eads, Gage [this message]
2017-01-26  9:39                 ` Jerin Jacob
2017-01-26 20:39                   ` Eads, Gage
2017-01-27 10:03                     ` Bruce Richardson
2017-01-30 10:42                     ` Jerin Jacob
2017-02-02 11:18         ` Nipun Gupta
2017-02-02 14:09           ` Jerin Jacob
2017-02-03  6:38             ` Nipun Gupta
2017-02-03 10:58               ` Hemant Agrawal
2017-02-07  4:59                 ` Jerin Jacob
2016-12-21  9:25       ` [PATCH v4 2/6] eventdev: define southbound driver interface Jerin Jacob
2017-02-02 11:19         ` Nipun Gupta
2017-02-02 11:34           ` Bruce Richardson
2017-02-02 12:53             ` Nipun Gupta
2017-02-02 13:58               ` Bruce Richardson
2017-02-03  5:59                 ` Nipun Gupta
2016-12-21  9:25       ` [PATCH v4 3/6] eventdev: implement the northbound APIs Jerin Jacob
2017-02-02 11:19         ` Nipun Gupta
2017-02-02 14:32           ` Jerin Jacob
2017-02-03  6:59             ` Nipun Gupta
2016-12-21  9:25       ` [PATCH v4 4/6] eventdev: implement PMD registration functions Jerin Jacob
2017-02-02 11:20         ` Nipun Gupta
2017-02-05 13:04           ` Jerin Jacob
2016-12-21  9:25       ` [PATCH v4 5/6] event/skeleton: add skeleton eventdev driver Jerin Jacob
2016-12-21  9:25       ` [PATCH v4 6/6] app/test: unit test case for eventdev APIs Jerin Jacob
2016-11-18  5:45 ` [PATCH 2/4] eventdev: implement the northbound APIs Jerin Jacob
2016-11-21 17:45   ` Eads, Gage
2016-11-21 19:13     ` Jerin Jacob
2016-11-21 19:31       ` Jerin Jacob
2016-11-22 15:15         ` Eads, Gage
2016-11-22 18:19           ` Jerin Jacob
2016-11-22 19:43             ` Eads, Gage
2016-11-22 20:00               ` Jerin Jacob
2016-11-22 22:48                 ` Eads, Gage
2016-11-22 23:43                   ` Jerin Jacob
2016-11-28 15:53                     ` Eads, Gage
2016-11-29  2:01                       ` Jerin Jacob
2016-11-29  3:43                       ` Jerin Jacob
2016-11-29  5:46                         ` Eads, Gage
2016-11-23  9:57           ` Bruce Richardson
2016-11-23 19:18   ` Thomas Monjalon
2016-11-25  4:17     ` Jerin Jacob
2016-11-25  9:55       ` Richardson, Bruce
2016-11-25 23:08         ` Jerin Jacob
2016-11-18  5:45 ` [PATCH 3/4] event/skeleton: add skeleton eventdev driver Jerin Jacob
2016-11-18  5:45 ` [PATCH 4/4] app/test: unit test case for eventdev APIs Jerin Jacob
2016-11-18 15:25 ` [PATCH 0/4] libeventdev API and northbound implementation Bruce Richardson
2016-11-18 16:04   ` Bruce Richardson
2016-11-18 19:27     ` Jerin Jacob
2016-11-21  9:40       ` Thomas Monjalon
2016-11-21  9:57         ` Bruce Richardson
2016-11-22  0:11           ` Thomas Monjalon
2016-11-22  2:00       ` Yuanhan Liu
2016-11-22  9:05         ` Shreyansh Jain

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=9184057F7FC11744A2107296B6B8EB1E01E5F3D3@FMSMSX108.amr.corp.intel.com \
    --to=gage.eads@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=harry.van.haaren@intel.com \
    --cc=hemant.agrawal@nxp.com \
    --cc=jerin.jacob@caviumnetworks.com \
    --cc=thomas.monjalon@6wind.com \
    --cc=timothy.mcdaniel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.