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
