They currently do not need to edit include/odp/api/config.h.
I ran into the issue yesterday and realized that you can override those 
settings from platform/<name>/include/odp/config.h already.
Because users are supposed to include odp/<name>.h which in turn includes 
odp/api/<name.h>, it is quite simple to override global settings this way.

I'm not against this patch although it's a bit of shame that every platform 
will have to duplicate all the file (including static inline functions) to 
change the define value.

Nicolas

On 07/21/2015 06:51 PM, Bill Fischofer wrote:
> The problem is twofold:
>
> 1. include/odp/api/ is supposed to contain pubic APIs that each platform 
> implements.  As such, having linux-generic #defines in the config.h file in 
> this location is inconsistent.  So this patch introduces actual APIs that are 
> platform independent.  So odp_config_pools() tells you the number of pools on 
> this platform.  
>
> 2. At the same time, some programs use the #defines directly to do things 
> like dimension arrays, so these #defines (as well as the implementations of 
> the public config APIs now live in platform/<name>/include/odp/config.h
>
> So no change for applications, however now each platform can easily define 
> their own limits without having to edit the include/odp/api/config.h file.
>
> On Tue, Jul 21, 2015 at 11:45 AM, Nicolas Morey-Chaisemartin 
> <[email protected] <mailto:[email protected]>> wrote:
>
>     Just for my information, why do we need this?
>
>
>     On 07/21/2015 06:42 PM, Bill Fischofer wrote:
>>     Please ignore this.  Resubmitting with proper API-NEXT tag.
>>
>>     On Tue, Jul 21, 2015 at 11:40 AM, Bill Fischofer 
>> <[email protected] <mailto:[email protected]>> wrote:
>>
>>         Move platform-specific #defines for limits from the public API to
>>         the platform directory and add public APIs for each of them.
>>
>>         Signed-off-by: Bill Fischofer <[email protected] 
>> <mailto:[email protected]>>
>>         ---
>>          include/odp/api/config.h                    |  61 ++++++-----
>>          platform/linux-generic/include/odp/config.h | 156 
>> ++++++++++++++++++++++++++++
>>          2 files changed, 192 insertions(+), 25 deletions(-)
>>
>>         diff --git a/include/odp/api/config.h b/include/odp/api/config.h
>>         index b5c8fdd..a57c76b 100644
>>         --- a/include/odp/api/config.h
>>         +++ b/include/odp/api/config.h
>>         @@ -19,50 +19,58 @@ extern "C" {
>>          #endif
>>
>>          /** @defgroup odp_config ODP CONFIG
>>         - *  Macro for maximum number of resources in ODP.
>>         + *  Platform-specific configuration limits.
>>           *  @{
>>           */
>>
>>          /**
>>           * Maximum number of threads
>>         + * @return The maximum number of threads supported by this platform
>>           */
>>         -#define ODP_CONFIG_MAX_THREADS  128
>>         +int odp_config_max_threads(void);
>>
>>          /**
>>           * Maximum number of pools
>>         + * @return The maximum number of pools supported by this platform
>>           */
>>         -#define ODP_CONFIG_POOLS        16
>>         +int odp_config_pools(void);
>>
>>          /**
>>           * Maximum number of queues
>>         + * @return The maximum number of queues supported by this platform
>>           */
>>         -#define ODP_CONFIG_QUEUES       1024
>>         +int odp_config_queues(void);
>>
>>          /**
>>           * Number of scheduling priorities
>>         + * @return The number of scheduling priorities supported by this 
>> platform
>>           */
>>         -#define ODP_CONFIG_SCHED_PRIOS  8
>>         +int odp_config_sched_prios(void);
>>
>>          /**
>>           * Maximum number of packet IO resources
>>         + * @return The maximum number of packet I/O resources supported by 
>> this
>>         + * platform
>>           */
>>         -#define ODP_CONFIG_PKTIO_ENTRIES 64
>>         +int odp_config_pktio_entries(void);
>>
>>          /**
>>           * Minimum buffer alignment
>>           *
>>         - * This defines the minimum supported buffer alignment. Requests 
>> for values
>>         - * below this will be rounded up to this value.
>>         + * @return The minimum buffer alignment supported by this platform
>>         + * @note Requests for values below this will be rounded up to this 
>> value.
>>           */
>>         -#define ODP_CONFIG_BUFFER_ALIGN_MIN 16
>>         +int odp_config_buffer_align_min(void);
>>
>>          /**
>>           * Maximum buffer alignment
>>           *
>>           * This defines the maximum supported buffer alignment. Requests 
>> for values
>>           * above this will fail.
>>         + *
>>         + * @return The maximum buffer alignment supported by this platform
>>           */
>>         -#define ODP_CONFIG_BUFFER_ALIGN_MAX (4*1024)
>>         +int odp_config_buffer_align_max(void);
>>
>>          /**
>>           * Default packet headroom
>>         @@ -72,11 +80,9 @@ extern "C" {
>>           * allocated packets. Implementations may reserve a larger than 
>> minimum headroom
>>           * size e.g. due to HW or a protocol specific alignment requirement.
>>           *
>>         - * @internal In linux-generic implementation:
>>         - * The default value (66) allows a 1500-byte packet to be received 
>> into a single
>>         - * segment with Ethernet offset alignment and room for some header 
>> expansion.
>>         + * @return Default packet headroom in bytes
>>           */
>>         -#define ODP_CONFIG_PACKET_HEADROOM 66
>>         +int odp_config_packet_headroom(void);
>>
>>          /**
>>           * Default packet tailroom
>>         @@ -84,10 +90,11 @@ extern "C" {
>>           * This defines the minimum number of tailroom bytes that newly 
>> created packets
>>           * have by default. The default apply to both ODP packet input and 
>> user
>>           * allocated packets. Implementations are free to add to this as 
>> desired
>>         - * without restriction. Note that most implementations will 
>> automatically
>>         - * consider any unused portion of the last segment of a packet as 
>> tailroom
>>         + * without restriction.
>>         + *
>>         + * @return The default packet tailroom in bytes
>>           */
>>         -#define ODP_CONFIG_PACKET_TAILROOM 0
>>         +int odp_config_packet_tailroom(void);
>>
>>          /**
>>           * Minimum packet segment length
>>         @@ -95,8 +102,10 @@ extern "C" {
>>           * This defines the minimum packet segment buffer length in bytes. 
>> The user
>>           * defined segment length (seg_len in odp_pool_param_t) will be 
>> rounded up into
>>           * this value.
>>         + *
>>         + * @return The minimum packet seg_len supported by this platform
>>           */
>>         -#define ODP_CONFIG_PACKET_SEG_LEN_MIN (1598)
>>         +int odp_config_packet_seg_len_min(void);
>>
>>          /**
>>           * Maximum packet segment length
>>         @@ -104,28 +113,30 @@ extern "C" {
>>           * This defines the maximum packet segment buffer length in bytes. 
>> The user
>>           * defined segment length (seg_len in odp_pool_param_t) must not be 
>> larger than
>>           * this.
>>         + *
>>         + * @return The maximum packet seg_len supported by this platform
>>           */
>>         -#define ODP_CONFIG_PACKET_SEG_LEN_MAX (64*1024)
>>         +int odp_config_packet_seg_len_max(void);
>>
>>          /**
>>           * Maximum packet buffer length
>>           *
>>           * This defines the maximum number of bytes that can be stored into 
>> a packet
>>         - * (maximum return value of odp_packet_buf_len()). Attempts to 
>> allocate
>>         + * (maximum return value of odp_packet_buf_len(void)). Attempts to 
>> allocate
>>           * (including default head- and tailrooms) or extend packets to 
>> sizes larger
>>           * than this limit will fail.
>>           *
>>         - * @internal In linux-generic implementation:
>>         - * - The value MUST be an integral number of segments
>>         - * - The value SHOULD be large enough to accommodate jumbo packets 
>> (9K)
>>         + * @return The maximum packet buffer length supported by this 
>> platform
>>           */
>>         -#define ODP_CONFIG_PACKET_BUF_LEN_MAX 
>> (ODP_CONFIG_PACKET_SEG_LEN_MIN*6)
>>         +int odp_config_packet_buf_len_max(void);
>>
>>          /** Maximum number of shared memory blocks.
>>           *
>>           * This the the number of separate SHM areas that can be reserved 
>> concurrently
>>         + *
>>         + * @return The maximum number of shm areas supported by this 
>> platform
>>           */
>>         -#define ODP_CONFIG_SHM_BLOCKS (ODP_CONFIG_POOLS + 48)
>>         +int odp_config_shm_blocks(void);
>>
>>          /**
>>           * @}
>>         diff --git a/platform/linux-generic/include/odp/config.h 
>> b/platform/linux-generic/include/odp/config.h
>>         index 6fecd38..016397e 100644
>>         --- a/platform/linux-generic/include/odp/config.h
>>         +++ b/platform/linux-generic/include/odp/config.h
>>         @@ -17,6 +17,162 @@
>>          extern "C" {
>>          #endif
>>
>>         +/**
>>         + * Maximum number of threads
>>         + */
>>         +#define ODP_CONFIG_MAX_THREADS 128
>>         +static inline int odp_config_max_threads(void)
>>         +{
>>         +       return ODP_CONFIG_MAX_THREADS;
>>         +}
>>         +
>>         +/**
>>         + * Maximum number of pools
>>         + */
>>         +#define ODP_CONFIG_POOLS 16
>>         +static inline int odp_config_pools(void)
>>         +{
>>         +       return ODP_CONFIG_POOLS;
>>         +}
>>         +
>>         +/**
>>         + * Maximum number of queues
>>         + */
>>         +#define ODP_CONFIG_QUEUES 1024
>>         +static inline int odp_config_queues(void)
>>         +{
>>         +       return ODP_CONFIG_QUEUES;
>>         +}
>>         +
>>         +/**
>>         + * Number of scheduling priorities
>>         + */
>>         +#define ODP_CONFIG_SCHED_PRIOS 8
>>         +static inline int odp_config_sched_prios(void)
>>         +{
>>         +       return ODP_CONFIG_SCHED_PRIOS;
>>         +}
>>         +
>>         +/**
>>         + * Maximum number of packet IO resources
>>         + */
>>         +#define ODP_CONFIG_PKTIO_ENTRIES 64
>>         +static inline int odp_config_pktio_entries(void)
>>         +{
>>         +       return ODP_CONFIG_PKTIO_ENTRIES;
>>         +}
>>         +
>>         +/**
>>         + * Minimum buffer alignment
>>         + *
>>         + * This defines the minimum supported buffer alignment. Requests 
>> for values
>>         + * below this will be rounded up to this value.
>>         + */
>>         +#define ODP_CONFIG_BUFFER_ALIGN_MIN 16
>>         +static inline int odp_config_buffer_align_min(void)
>>         +{
>>         +       return ODP_CONFIG_BUFFER_ALIGN_MIN;
>>         +}
>>         +
>>         +/**
>>         + * Maximum buffer alignment
>>         + *
>>         + * This defines the maximum supported buffer alignment. Requests 
>> for values
>>         + * above this will fail.
>>         + */
>>         +#define ODP_CONFIG_BUFFER_ALIGN_MAX (4*1024)
>>         +static inline int odp_config_buffer_align_max(void)
>>         +{
>>         +       return ODP_CONFIG_BUFFER_ALIGN_MAX;
>>         +}
>>         +
>>         +/**
>>         + * Default packet headroom
>>         + *
>>         + * This defines the minimum number of headroom bytes that newly 
>> created packets
>>         + * have by default. The default apply to both ODP packet input and 
>> user
>>         + * allocated packets. Implementations may reserve a larger than 
>> minimum headroom
>>         + * size e.g. due to HW or a protocol specific alignment requirement.
>>         + *
>>         + * @internal In linux-generic implementation:
>>         + * The default value (66) allows a 1500-byte packet to be received 
>> into a single
>>         + * segment with Ethernet offset alignment and room for some header 
>> expansion.
>>         + */
>>         +#define ODP_CONFIG_PACKET_HEADROOM 66
>>         +static inline int odp_config_packet_headroom(void)
>>         +{
>>         +       return ODP_CONFIG_PACKET_HEADROOM;
>>         +}
>>         +
>>         +/**
>>         + * Default packet tailroom
>>         + *
>>         + * This defines the minimum number of tailroom bytes that newly 
>> created packets
>>         + * have by default. The default apply to both ODP packet input and 
>> user
>>         + * allocated packets. Implementations are free to add to this as 
>> desired
>>         + * without restriction. Note that most implementations will 
>> automatically
>>         + * consider any unused portion of the last segment of a packet as 
>> tailroom
>>         + */
>>         +#define ODP_CONFIG_PACKET_TAILROOM 0
>>         +static inline int odp_config_packet_tailroom(void)
>>         +{
>>         +       return ODP_CONFIG_PACKET_TAILROOM;
>>         +}
>>         +
>>         +/**
>>         + * Minimum packet segment length
>>         + *
>>         + * This defines the minimum packet segment buffer length in bytes. 
>> The user
>>         + * defined segment length (seg_len in odp_pool_param_t) will be 
>> rounded up into
>>         + * this value.
>>         + */
>>         +#define ODP_CONFIG_PACKET_SEG_LEN_MIN 1598
>>         +static inline int odp_config_packet_seg_len_min(void)
>>         +{
>>         +       return ODP_CONFIG_PACKET_SEG_LEN_MIN;
>>         +}
>>         +
>>         +/**
>>         + * Maximum packet segment length
>>         + *
>>         + * This defines the maximum packet segment buffer length in bytes. 
>> The user
>>         + * defined segment length (seg_len in odp_pool_param_t) must not be 
>> larger than
>>         + * this.
>>         + */
>>         +#define ODP_CONFIG_PACKET_SEG_LEN_MAX (64*1024)
>>         +static inline int odp_config_packet_seg_len_max(void)
>>         +{
>>         +       return ODP_CONFIG_PACKET_SEG_LEN_MAX;
>>         +}
>>         +
>>         +/**
>>         + * Maximum packet buffer length
>>         + *
>>         + * This defines the maximum number of bytes that can be stored into 
>> a packet
>>         + * (maximum return value of odp_packet_buf_len(void)). Attempts to 
>> allocate
>>         + * (including default head- and tailrooms) or extend packets to 
>> sizes larger
>>         + * than this limit will fail.
>>         + *
>>         + * @internal In linux-generic implementation:
>>         + * - 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)
>>         +static inline int odp_config_packet_buf_len_max(void)
>>         +{
>>         +       return ODP_CONFIG_PACKET_BUF_LEN_MAX;
>>         +}
>>         +
>>         +/** Maximum number of shared memory blocks.
>>         + *
>>         + * This the the number of separate SHM areas that can be reserved 
>> concurrently
>>         + */
>>         +#define ODP_CONFIG_SHM_BLOCKS (ODP_CONFIG_POOLS + 48)
>>         +static inline int odp_config_shm_blocks(void)
>>         +{
>>         +       return ODP_CONFIG_SHM_BLOCKS;
>>         +}
>>         +
>>          #include <odp/api/config.h>
>>
>>          #ifdef __cplusplus
>>         --
>>         2.1.4
>>
>>
>>
>>
>>     _______________________________________________
>>     lng-odp mailing list
>>     [email protected] <mailto:[email protected]>
>>     https://lists.linaro.org/mailman/listinfo/lng-odp
>
>
>     _______________________________________________
>     lng-odp mailing list
>     [email protected] <mailto:[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