Hi,

Few comments inline

On 20 July 2015 at 22:38, Nicolas Morey-Chaisemartin <[email protected]>
wrote:

> Replace current segmentation with an explicit define.
> This mainly means two things:
>  - All code can now test and check the max segmentation which will prove
>    useful for tests and open the way for many code optimizations.
>  - The minimum segment length and the maximum buffer len can now be
> decorrelated.
>    This means that pool with very small footprints can be allocated for
> small packets,
>    while pool for jumbo frame will still work as long as seg_len *
> ODP_CONFIG_PACKET_MAX_SEG >= packet_len
>
> Signed-off-by: Nicolas Morey-Chaisemartin <[email protected]>
> ---
>  include/odp/api/config.h                             | 10 +++++++++-
>  platform/linux-generic/include/odp_buffer_internal.h |  9 +++------
>  platform/linux-generic/odp_pool.c                    |  4 ++--
>  test/validation/packet/packet.c                      |  3 ++-
>  4 files changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/include/odp/api/config.h b/include/odp/api/config.h
> index b5c8fdd..1f44db6 100644
> --- a/include/odp/api/config.h
> +++ b/include/odp/api/config.h
> @@ -108,6 +108,13 @@ extern "C" {
>  #define ODP_CONFIG_PACKET_SEG_LEN_MAX (64*1024)
>
>  /**
> + * Maximum number of segments in a packet
> + *
> + * This defines the maximum number of segment buffers in a packet
> + */
> +#define ODP_CONFIG_PACKET_MAX_SEG 6
>

What is the use-case of the above define? Does it mean that the packet
should not be stored in a pool if the max number of segment gets reached?
If this is something used in the linux-generic we can define it in the
internal header file.

The reason is that the #defines in config.h file has to be defined by all
the platforms.

Regards,
Bala

+
> +/**
>   * Maximum packet buffer length
>   *
>   * This defines the maximum number of bytes that can be stored into a
> packet
> @@ -119,7 +126,8 @@ extern "C" {
>   * - The value MUST be an integral number of segments
>   * - The value SHOULD be large enough to accommodate jumbo packets (9K)
>   */
> -#define ODP_CONFIG_PACKET_BUF_LEN_MAX (ODP_CONFIG_PACKET_SEG_LEN_MIN*6)
> +#define ODP_CONFIG_PACKET_BUF_LEN_MAX (ODP_CONFIG_PACKET_SEG_LEN_MIN * \
> +                                      ODP_CONFIG_PACKET_MAX_SEG)
>
>  /** Maximum number of shared memory blocks.
>   *
> diff --git a/platform/linux-generic/include/odp_buffer_internal.h
> b/platform/linux-generic/include/odp_buffer_internal.h
> index ae799dd..5d1199a 100644
> --- a/platform/linux-generic/include/odp_buffer_internal.h
> +++ b/platform/linux-generic/include/odp_buffer_internal.h
> @@ -57,14 +57,11 @@ _ODP_STATIC_ASSERT((ODP_CONFIG_PACKET_BUF_LEN_MAX %
>                    ODP_CONFIG_PACKET_SEG_LEN_MIN) == 0,
>                   "Packet max size must be a multiple of segment size");
>
> -#define ODP_BUFFER_MAX_SEG \
> -       (ODP_CONFIG_PACKET_BUF_LEN_MAX / ODP_CONFIG_PACKET_SEG_LEN_MIN)
> -
>  /* We can optimize storage of small raw buffers within metadata area */
> -#define ODP_MAX_INLINE_BUF     ((sizeof(void *)) * (ODP_BUFFER_MAX_SEG -
> 1))
> +#define ODP_MAX_INLINE_BUF     ((sizeof(void *)) *
> (ODP_CONFIG_PACKET_MAX_SEG - 1))
>
>  #define ODP_BUFFER_POOL_BITS   ODP_BITSIZE(ODP_CONFIG_POOLS)
> -#define ODP_BUFFER_SEG_BITS    ODP_BITSIZE(ODP_BUFFER_MAX_SEG)
> +#define ODP_BUFFER_SEG_BITS    ODP_BITSIZE(ODP_CONFIG_PACKET_MAX_SEG)
>  #define ODP_BUFFER_INDEX_BITS  (32 - ODP_BUFFER_POOL_BITS -
> ODP_BUFFER_SEG_BITS)
>  #define ODP_BUFFER_PREFIX_BITS (ODP_BUFFER_POOL_BITS +
> ODP_BUFFER_INDEX_BITS)
>  #define ODP_BUFFER_MAX_POOLS   (1 << ODP_BUFFER_POOL_BITS)
> @@ -130,7 +127,7 @@ typedef struct odp_buffer_hdr_t {
>         uint32_t                 uarea_size; /* size of user area */
>         uint32_t                 segcount;   /* segment count */
>         uint32_t                 segsize;    /* segment size */
> -       void                    *addr[ODP_BUFFER_MAX_SEG]; /* block addrs
> */
> +       void                    *addr[ODP_CONFIG_PACKET_MAX_SEG]; /* block
> addrs */
>  } odp_buffer_hdr_t;
>
>  /** @internal Compile time assert that the
> diff --git a/platform/linux-generic/odp_pool.c
> b/platform/linux-generic/odp_pool.c
> index 0b8921c..ff2a89c 100644
> --- a/platform/linux-generic/odp_pool.c
> +++ b/platform/linux-generic/odp_pool.c
> @@ -217,7 +217,7 @@ odp_pool_t odp_pool_create(const char *name,
> odp_pool_param_t *params)
>                         ODP_ALIGN_ROUNDUP(params->pkt.len, seg_len);
>
>                 /* Reject create if pkt.len needs too many segments */
> -               if (blk_size / seg_len > ODP_BUFFER_MAX_SEG)
> +               if (blk_size / seg_len > ODP_CONFIG_PACKET_MAX_SEG)
>                         return ODP_POOL_INVALID;
>
>                 p_udata_size = params->pkt.uarea_size;
> @@ -481,7 +481,7 @@ odp_buffer_t buffer_alloc(odp_pool_t pool_hdl, size_t
> size)
>         /* Reject oversized allocation requests */
>         if ((pool->s.flags.unsegmented && totsize > pool->s.seg_size) ||
>             (!pool->s.flags.unsegmented &&
> -            totsize > pool->s.seg_size * ODP_BUFFER_MAX_SEG))
> +            totsize > pool->s.seg_size * ODP_CONFIG_PACKET_MAX_SEG))
>                 return ODP_BUFFER_INVALID;
>
>         /* Try to satisfy request from the local cache */
> diff --git a/test/validation/packet/packet.c
> b/test/validation/packet/packet.c
> index e6fb18a..05f0532 100644
> --- a/test/validation/packet/packet.c
> +++ b/test/validation/packet/packet.c
> @@ -23,7 +23,8 @@ static const uint32_t packet_len = PACKET_BUF_LEN -
>                                 ODP_CONFIG_PACKET_TAILROOM -
>                                 PACKET_TAILROOM_RESERVE;
>
> -static const uint32_t segmented_packet_len = PACKET_BUF_LEN * 5 -
> +static const uint32_t segmented_packet_len =
> +       PACKET_BUF_LEN * ODP_CONFIG_PACKET_MAX_SEG -
>         ODP_CONFIG_PACKET_HEADROOM - ODP_CONFIG_PACKET_TAILROOM -
>         PACKET_TAILROOM_RESERVE;
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to