aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2020-01-10 13:39:38 +0200
committerPetri Savolainen <petri.savolainen@nokia.com>2020-01-28 13:15:54 +0200
commita072a42095fdd2d7b85343007e34bc424bcf5032 (patch)
treeb4fba43fe1cb26da71bea0ef56a1d30755cb6956
parentf6cb2b6f9cd9c0218ec564f75a0cda543a4477ba (diff)
linux-gen: pool: set packet pool max align capa
Implement the new packet align pool parameter with minimal changes. Packet pools are aligned always to the base align, so all application requests up to that value are supported. Base align can be changed through the config file. Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com> Reviewed-by: Stanislaw Kardach <skardach@marvell.com>
-rw-r--r--config/odp-linux-generic.conf3
-rw-r--r--platform/linux-generic/odp_pool.c10
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;