On Tue, Jun 20, 2017 at 3:12 PM, Savolainen, Petri (Nokia - FI/Espoo)
<petri.savolai...@nokia.com> wrote:
>
>
>> -----Original Message-----
>> From: shally verma [mailto:shallyvermacav...@gmail.com]
>> Sent: Tuesday, June 20, 2017 8:55 AM
>> To: Bill Fischofer <bill.fischo...@linaro.org>
>> Cc: Savolainen, Petri (Nokia - FI/Espoo) <petri.savolai...@nokia.com>;
>> lng-odp-forward <lng-odp@lists.linaro.org>
>> Subject: Re: [lng-odp] [API-NEXT PATCH v3 1/3] api: event: add subtype to
>> expand event type
>>
>> On Fri, Jun 16, 2017 at 7:15 PM, Bill Fischofer
>> <bill.fischo...@linaro.org> wrote:
>> > On Fri, Jun 16, 2017 at 8:33 AM, shally verma
>> > <shallyvermacav...@gmail.com> wrote:
>> >> On Fri, Jun 16, 2017 at 6:42 PM, Bill Fischofer
>> >> <bill.fischo...@linaro.org> wrote:
>> >>> On Fri, Jun 16, 2017 at 8:04 AM, Savolainen, Petri (Nokia - FI/Espoo)
>> >>> <petri.savolai...@nokia.com> wrote:
>> >>>>> > diff --git a/include/odp/api/spec/event.h
>> b/include/odp/api/spec/event.h
>> >>>>> > index f22efce5..2ad3ce84 100644
>> >>>>> > --- a/include/odp/api/spec/event.h
>> >>>>> > +++ b/include/odp/api/spec/event.h
>> >>>>> > @@ -37,21 +37,91 @@ extern "C" {
>> >>>>> >
>> >>>>> >  /**
>> >>>>> >   * @typedef odp_event_type_t
>> >>>>> > - * ODP event types:
>> >>>>> > - * ODP_EVENT_BUFFER, ODP_EVENT_PACKET, ODP_EVENT_TIMEOUT,
>> >>>>> > - * ODP_EVENT_CRYPTO_COMPL, ODP_EVENT_IPSEC_RESULT,
>> >>>>> ODP_EVENT_IPSEC_STATUS
>> >>>>> > + * Event type
>> >>>>> > + *
>> >>>>> > + * Event type specifies purpose and general format of an event.
>> It can
>> >>>>> be
>> >>>>> > + * checked with odp_event_type() or odp_event_types(). Each event
>> type
>> >>>>> has
>> >>>>> > + * functions (e.g. odp_buffer_from_event()) to convert between
>> the
>> >>>>> generic event
>> >>>>> > + * handle (odp_event_t) and the type specific handle (e.g.
>> >>>>> odp_buffer_t).
>> >>>>> > + * Results are undefined, if conversion function of a wrong event
>> type
>> >>>>> is used.
>> >>>>> > + * Application cannot change event type by chaining conversion
>> >>>>> functions.
>> >>>>> > + *
>> >>>>> > + * List of event types:
>> >>>>> > + * - ODP_EVENT_BUFFER
>> >>>>> > + *     - Buffer event (odp_buffer_t) for simple data storage and
>> >>>>> message passing
>> >>>>> > + * - ODP_EVENT_PACKET
>> >>>>> > + *     - Packet event (odp_packet_t) containing packet data and
>> plenty
>> >>>>> of
>> >>>>>
>> >>>>> Why "plenty of"? "containing packet data and associated metadata"
>> >>>>> seems sufficient.
>> >>>>
>> >>>> It highlights that packets should be used only for packets, not as
>> random buffer space (buffers are simple vs. packets are complex).
>> >>>
>> >>> Ok, it just looked a bit odd. Not a biggie.
>> >>>
>> >>>>
>> >>>> BTW. It would have been nice to get all review comments in one go. I
>> did sent v3 as there were no more comments. I cannot do v4 before our lab
>> is back online from a maintenance break... Hopefully v4 is not necessary.
>> >>>
>> >>> Still working on it. This series needs Bala and Nikhil's reviews as a
>> >>> check against their HW. But so far this looks very reasonable.
>> >>>
>> >>>>
>> >>>> -Petri
>> >>
>> >> So, how does this affect event notification mechanism now?
>> >> Currently we had ODP_EVENT_COMP_COMPL set on a packet to mark
>> >> compression/decompression complete status on requested input. So that
>> >> still remain valid Or we need to introduce it like:
>> >>
>> >> event ODP_EVENT_PACKET
>> >> subtype ODP_EVENT_PACKET_COMP_COMPL?
>> >
>> > For consistency with the subtype pattern defined here I'd guess
>> > ODP_EVENT_PACKET_COMP would be the name to use.
>> >
>> >>
>> Ok. but it still leave question open for me. Should existing
>> Compression/Crypto completion event is going to be there or do we need
>> to change as per current proposal? Or current proposal is for newer
>> event notifications. When an compression/encryption event should be
>> considered as sub-event to packet? What event should be if user send a
>> buffer for compression/decompression than packet? May be I am missing
>> broader perspective to this proposal.
>
> If/when this patch is merged, new work (like comp) should be done against it. 
> So, comp packet would be another subtype. Also, crypto completion APIs will 
> be changed to this (with deprecation).
>
Ok.

> By buffer, do you mean odp_buffer_t event, or void *ptr ? Maybe ptr/len is 
> more relevant addition than odp_buffer_t.
Though not fully decide yet on it but most likely it will ptr/len struct.

> Sync version of that (ptr/len) is easy, async version would need another 
> event type.

if so, then I probably retain ODP_EVENT_COMP_COMPL for event
notification on buffer data.

>>
>> Also, I have bit of confusion with event type enums placement.
>> ODO_EVENT_PACKET/ODP_EVENT_CRYPTO_COMPL .. are these standard event
>> types and public? Because I see their definition inside
>> platform/linux-generic/include/odp/api/plat/event_types.h instead of
>> standard spec file at include/odp/api/spec/event.h giving me an
>> impression they are platform specific enum defines.
>
> API spec defines the enum names, but not the values. Application must not 
> rely on the values. Depending on implementation, values may be HW defined.
>
Ok.

> /**
>  * @typedef odp_event_type_t
>  * ODP event types:
>  * ODP_EVENT_BUFFER, ODP_EVENT_PACKET,
>
>
>
>>
>> So far I was under impression because they are platform specific so we
>> are introducing conversion APIs like
>> odp_xxx_event_from_event() so that user don't need to know specific
>> event enumeration. As example (referring to crypto as base design) ,
>> we have:
>>
>> odp_comp_compl_t odp_comp_compl_from_event(odp_event_t);
>> odp_comp_compl_result(odp_comp_compl_t comp_handle,
>> odp_comp_op_result_t *result);
>>
>> Am I missing any base assumption here?
>
> odp_event_t is the base class of actual events (e.g. odp_packet_t). 
> Odp_event_t offers minimal operations such as check types or free event 
> without checking the type. Odp_event_t handle needs to be converted to the 
> type specific handle, before application is able to access more 
> features/metadata. The result call is one example of getting metadata from an 
> event.
>
> With the subtype specification these would turn into:
>
> odp_packet_t odp_comp_packet_from_event(odp_event_t ev);
> int odp_comp_result(odp_comp_result_t *result, odp_packet_t pkt);
>
> ... or
>
> int odp_comp_pkt_result(odp_comp_pkt_result_t *result, odp_packet_t pkt);
> int odp_comp_xxx_result(odp_comp_xxx_result_t *result, odp_comp_xxx_t xxx);
>
> ... if you speculate with another non-packet result type.
>
Can it simply be translated to one single API like odp_xxx_get_event_data() .
For ex. for compression, it translates to:

odp_event_type_t event_t = odp_event_get_type_subtype(event, &subtype);

if(event_t == ODP_EVENT_PACKET) {
  switch(subtype) {
       case ODP_EVENT_PACKET_COMP:
        odp_comp_op_result_t result;
        odp_comp_get_event_data(event, (void *)&result);
      /* Or since event is originating from packet so it can be
odp_packet_get_event_data() as well.
     */
      break;
   }
}

this way odp_xxx_get_event_data() can further scale to handle more
event types or sub-types to it. Otherwise I see we will need to add
conversion API for each new type and sub-type specific data. What is
more preferred approach here?

Thanks
Shally

>
> -Petri
>
>

Reply via email to