On 28 May 2015 at 10:38, Zoltan Kiss <[email protected]> wrote:

> A pktio interface can be used with poll mode drivers, where TX completion
> often
> has to be done manually. This turned up as a problem with ODP-DPDK and
> odp_l2fwd:
>
> while (!exit_threads) {
>         pkts = odp_pktio_recv(pktio_src,...);
>         if (pkts <= 0)
>                 continue;
> ...
>         if (pkts_ok > 0)
>                 odp_pktio_send(pktio_dst, pkt_tbl, pkts_ok);
> ...
> }
>
> In this example we never call odp_pktio_send() on pktio_dst if there wasn't
> any new packets received on pktio_src. DPDK needs manual TX completion. The
> above example should have an odp_pktio_send_completion(pktio_dst) right at
> the
> beginning of the loop.
>
> Signed-off-by: Zoltan Kiss <[email protected]>
> ---
>  include/odp/api/packet_io.h | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
>
> diff --git a/include/odp/api/packet_io.h b/include/odp/api/packet_io.h
> index b97b2b8..3a4054c 100644
> --- a/include/odp/api/packet_io.h
> +++ b/include/odp/api/packet_io.h
> @@ -119,6 +119,22 @@ int odp_pktio_recv(odp_pktio_t pktio, odp_packet_t
> pkt_table[], int len);
>  int odp_pktio_send(odp_pktio_t pktio, odp_packet_t pkt_table[], int len);
>
>  /**
> + * Release sent packets
> + *
> + * This function should be called after sending on a pktio. If the
> platform
> + * doesn't implement send completion in other ways, this function should
> call
> + * odp_packet_free() on packets where transmission is already completed.
> It can
> + * be a no-op if the platform guarantees that the packets will be
> released upon
> + * completion,


You provide an example of usage above, can it be added between @code and
 @endcode in this documentation for others to see in the rendered docs?


> but the application must call it periodically after send to make
> + * sure packets are released.
>

This is an important requirement and should be highlighted in the final doc
with @note:-
@note The application must call  odp_pktio_send_complete periodically after
send to make sure packets are released.
Also is there any guild line on "periodically" is once ok, I assume not,
but I also assume that it is not as frequent as for every send.

The odp_pktio_send  documentation could also do with a reference to
 odp_pktio_send_complete to ensure that readers will know of the
requirement, they may miss it otherwise.



> + *
> + * @param pktio        ODP packet IO handle
> + *
> + * @retval <0 on failure
>

Are there any specific failures you can define, specifics are nice things
to test in the validation suite to ensure all platforms behave the same way


> + */
> +int odp_pktio_send_complete(odp_pktio_t pktio);
> +
> +/**
>   * Set the default input queue to be associated with a pktio handle
>   *
>   * @param pktio                ODP packet IO handle
> --
> 1.9.1
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> https://lists.linaro.org/mailman/listinfo/lng-odp
>



-- 
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to