OK.

For this series:

Reviewed-and-tested-by: Bill Fischofer <bill.fischo...@linaro.org>

On Fri, Dec 23, 2016 at 1:56 AM, Savolainen, Petri (Nokia - FI/Espoo)
<petri.savolai...@nokia-bell-labs.com> wrote:
>
>
>> -----Original Message-----
>> From: Bill Fischofer [mailto:bill.fischo...@linaro.org]
>> Sent: Thursday, December 22, 2016 6:59 PM
>> To: Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia-bell-
>> labs.com>
>> Cc: lng-odp-forward <lng-odp@lists.linaro.org>
>> Subject: Re: [lng-odp] [API-NEXT PATCH 1/7] api: packet: src and dst
>> packet must not be the same
>>
>> On Thu, Dec 22, 2016 at 8:33 AM, Petri Savolainen
>> <petri.savolai...@nokia.com> wrote:
>> > Concat and copy_from_pkt operations must be called with src and
>> > dst packet handles which refer to the same packet.
>> >
>> > Signed-off-by: Petri Savolainen <petri.savolai...@nokia.com>
>> > ---
>> >  include/odp/api/spec/packet.h | 6 +++++-
>> >  1 file changed, 5 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/include/odp/api/spec/packet.h
>> b/include/odp/api/spec/packet.h
>> > index faf62e2..4a86eba 100644
>> > --- a/include/odp/api/spec/packet.h
>> > +++ b/include/odp/api/spec/packet.h
>> > @@ -781,7 +781,8 @@ uint32_t odp_packet_seg_data_len(odp_packet_t pkt,
>> odp_packet_seg_t seg);
>> >   * Concatenate all packet data from 'src' packet into tail of 'dst'
>> packet.
>> >   * Operation preserves 'dst' packet metadata in the resulting packet,
>> >   * while 'src' packet handle, metadata and old segment handles for both
>> packets
>> > - * become invalid.
>> > + * become invalid. Source and destination packet handles must not refer
>> to
>> > + * the same packet.
>>
>> Why introduce this restriction? Concatenating a packet to itself is a
>> well-defined operation and is supported by other languages that
>> provide similar concatenation operations.
>
> Concat is not the same as copy. Application forms a new packet from two old 
> packets. If application wants to duplicate data in one packet it must do a 
> copy. If you concat a packet into itself, you form a loop which does not make 
> any sense.
>
>
>>
>> >   *
>> >   * A successful operation overwrites 'dst' packet handle with a new
>> handle,
>> >   * which application must use as the reference to the resulting packet
>> > @@ -928,6 +929,9 @@ int odp_packet_copy_from_mem(odp_packet_t pkt,
>> uint32_t offset,
>> >   * Copy 'len' bytes of data from 'src' packet to 'dst' packet. Copy
>> starts from
>> >   * the specified source and destination packet offsets. Copied areas
>> >   * (offset ... offset + len) must not exceed their packet data lengths.
>> > + * Source and destination packet handles must not refer to the same
>> packet (use
>> > + * odp_packet_copy_data() or odp_packet_move_data() for a single
>> packet).
>>
>> Same question here. It's simple enough for the implementation to check
>> this and behave appropriately (as the current implementation does).
>> Why introduce this change now?
>
>
> As the documentation change highlights: we have odp_packet_copy_data() and 
> odp_packet_move_data() defined exactly for the case of copying or moving data 
> within one packet. odp_packet_copy_from_pkt() is defined for copying data 
> between two different packets. Application must use the right tool for the 
> problem, instead of implementation needing to check every time if application 
> happens to use a wrong tool.
>
> So, it's not change in behavior, but more explicit definition of the purpose 
> of the existing calls.
>
> -Petri
>
>

Reply via email to