Reviewed-by: Balasubramanian Manoharan <bala.manoha...@linaro.org>

On 15 August 2015 at 00:25, Zoltan Kiss <zoltan.k...@linaro.org> wrote:

> Applications can preset certain parts of the packet user area, so when that
> memory will be allocated it starts from a known state. If the platform
> allocates the memory during pool creation, it's enough to run the
> constructor after that. If it's allocating memory on demand, it should
> call the constructor each time.
> Porting applications to ODP can benefit from this. If the application can't
> afford to change its whole packet handling to ODP, it's likely it needs to
> maintain its own metadata in the user area. And probably it needs to set
> constant fields in that metadata e.g. to mark that this is an ODP packet,
> and/or store the handle of the packet itself.
>
> Signed-off-by: Zoltan Kiss <zoltan.k...@linaro.org>
> ---
> v2:
> - restrict this feature to packet user area
> - expand comments
>
> v3:
> - include packet.h in pool.h
>
> v4:
> - fix grammar based on Bill's comments
>
>  include/odp/api/packet.h |  3 +++
>  include/odp/api/pool.h   | 26 ++++++++++++++++++++++++++
>  2 files changed, 29 insertions(+)
>
> diff --git a/include/odp/api/packet.h b/include/odp/api/packet.h
> index 3a454b5..f5d2142 100644
> --- a/include/odp/api/packet.h
> +++ b/include/odp/api/packet.h
> @@ -73,6 +73,9 @@ extern "C" {
>   * @note The default headroom and tailroom used for packets is specified
> by
>   * the ODP_CONFIG_PACKET_HEADROOM and ODP_CONFIG_PACKET_TAILROOM defines
> in
>   * odp_config.h.
> + * @note Data changed in user area might be preserved by the platform from
> + * previous usage of the buffer, so values preset in uarea_init() are not
> + * guaranteed.
>   */
>  odp_packet_t odp_packet_alloc(odp_pool_t pool, uint32_t len);
>
> diff --git a/include/odp/api/pool.h b/include/odp/api/pool.h
> index 2e79a55..01f770f 100644
> --- a/include/odp/api/pool.h
> +++ b/include/odp/api/pool.h
> @@ -21,6 +21,7 @@ extern "C" {
>
>
>  #include <odp/std_types.h>
> +#include <odp/packet.h>
>
>  /** @defgroup odp_pool ODP POOL
>   *  Operations on a pool.
> @@ -41,6 +42,23 @@ extern "C" {
>  #define ODP_POOL_NAME_LEN  32
>
>  /**
> + * Packet user area initializer callback function for pools.
> + *
> + * @param pkt                   Handle of the packet
> + * @param uarea_init_arg        Opaque pointer defined in odp_pool_param_t
> + *
> + * @note If the application specifies this pointer, it expects that every
> buffer
> + * is initialized exactly once with it when the underlying memory is
> allocated.
> + * It is not called from odp_packet_alloc(), unless the platform chooses
> to
> + * allocate the memory at that point. Applications can only assume that
> this
> + * callback is called once before the packet is first used. Any subsequent
> + * change to the user area might be preserved after odp_packet_free() is
> called,
> + * so applications should take care of (re)initialization if they change
> data
> + * preset by this function.
> + */
> +typedef void (odp_packet_uarea_init_t)(odp_packet_t pkt, void
> *uarea_init_arg);
> +
> +/**
>   * Pool parameters
>   * Used to communicate pool creation options.
>   */
> @@ -82,6 +100,14 @@ typedef struct odp_pool_param_t {
>                         /** User area size in bytes. Specify as 0 if no
> user
>                             area is needed. */
>                         uint32_t uarea_size;
> +
> +                       /** Initialize every packet's user area at
> allocation
> +                           time. Use NULL if no initialization needed. */
> +                       odp_packet_uarea_init_t *uarea_init;
> +
> +                       /** Opaque pointer passed to packet user area
> +                           constructor. */
> +                       void *uarea_init_arg;
>                 } pkt;
>                 struct {
>                         /** Number of timeouts in the pool */
> --
> 1.9.1
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to