diff options
Diffstat (limited to 'test/validation/api/buffer/buffer.c')
-rw-r--r-- | test/validation/api/buffer/buffer.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/test/validation/api/buffer/buffer.c b/test/validation/api/buffer/buffer.c index 19f39e1d3..c3484e14a 100644 --- a/test/validation/api/buffer/buffer.c +++ b/test/validation/api/buffer/buffer.c @@ -1,5 +1,5 @@ /* Copyright (c) 2014-2018, Linaro Limited - * Copyright (c) 2019, Nokia + * Copyright (c) 2019-2022, Nokia * Copyright (c) 2022, Marvell * All rights reserved. * @@ -7,6 +7,7 @@ */ #include <odp_api.h> +#include <odp/helper/odph_debug.h> #include "odp_cunit_common.h" #define BUF_ALIGN ODP_CACHE_LINE_SIZE @@ -491,6 +492,58 @@ static void buffer_test_pool_max_pools_max_cache(void) test_pool_max_pools(¶m); } +static void buffer_test_user_area(void) +{ + odp_pool_t pool; + odp_pool_param_t param; + uint32_t i, num; + void *addr; + void *prev = NULL; + uint32_t num_alloc = 0; + uint32_t size = 1024; + const uint32_t max_size = pool_capa.buf.max_uarea_size; + + if (max_size == 0) { + ODPH_DBG("Buffer user area not supported\n"); + return; + } + + if (size > max_size) + size = max_size; + + memcpy(¶m, &default_param, sizeof(odp_pool_param_t)); + param.buf.uarea_size = size; + + num = param.buf.num; + + odp_buffer_t buffer[num]; + + pool = odp_pool_create("test_user_area", ¶m); + CU_ASSERT_FATAL(pool != ODP_POOL_INVALID); + + for (i = 0; i < num; i++) { + buffer[i] = odp_buffer_alloc(pool); + + if (buffer[i] == ODP_BUFFER_INVALID) + break; + num_alloc++; + + addr = odp_buffer_user_area(buffer[i]); + CU_ASSERT_FATAL(addr != NULL); + CU_ASSERT(prev != addr); + + prev = addr; + memset(addr, 0, size); + } + + CU_ASSERT(i == num); + + if (num_alloc) + odp_buffer_free_multi(buffer, num_alloc); + + CU_ASSERT_FATAL(odp_pool_destroy(pool) == 0); +} + odp_testinfo_t buffer_suite[] = { ODP_TEST_INFO(buffer_test_pool_alloc_free), ODP_TEST_INFO(buffer_test_pool_alloc_free_min_cache), @@ -507,6 +560,7 @@ odp_testinfo_t buffer_suite[] = { ODP_TEST_INFO(buffer_test_pool_max_pools), ODP_TEST_INFO(buffer_test_pool_max_pools_min_cache), ODP_TEST_INFO(buffer_test_pool_max_pools_max_cache), + ODP_TEST_INFO(buffer_test_user_area), ODP_TEST_INFO_NULL, }; |