diff options
-rw-r--r-- | config/odp-linux-generic.conf | 3 | ||||
-rw-r--r-- | platform/linux-generic/odp_pool.c | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/config/odp-linux-generic.conf b/config/odp-linux-generic.conf index 5a3ca72ff..b1f0e9009 100644 --- a/config/odp-linux-generic.conf +++ b/config/odp-linux-generic.conf @@ -62,7 +62,8 @@ pool: { max_num = 262143 # Base alignment for segment data. When set to zero, - # cache line size is used. Use power of two values. + # cache line size is used. Use power of two values. This is + # also the maximum value for the packet pool alignment param. base_align = 0 } diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c index 5d5217aaf..e1964f840 100644 --- a/platform/linux-generic/odp_pool.c +++ b/platform/linux-generic/odp_pool.c @@ -503,6 +503,15 @@ static odp_pool_t pool_create(const char *name, odp_pool_param_t *params, align = 0; if (params->type == ODP_POOL_PACKET) { + uint32_t align_req = params->pkt.align; + + if (align_req && + (!CHECK_IS_POWER2(align_req) || + align_req > _odp_pool_glb->config.pkt_base_align)) { + ODP_ERR("Bad align requirement\n"); + return ODP_POOL_INVALID; + } + align = _odp_pool_glb->config.pkt_base_align; } else { if (params->type == ODP_POOL_BUFFER) @@ -1106,6 +1115,7 @@ int odp_pool_capability(odp_pool_capability_t *capa) capa->pkt.max_pools = max_pools; capa->pkt.max_len = CONFIG_PACKET_MAX_LEN; capa->pkt.max_num = _odp_pool_glb->config.pkt_max_num; + capa->pkt.max_align = _odp_pool_glb->config.pkt_base_align; capa->pkt.min_headroom = CONFIG_PACKET_HEADROOM; capa->pkt.max_headroom = CONFIG_PACKET_HEADROOM; capa->pkt.min_tailroom = CONFIG_PACKET_TAILROOM; |