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
