This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "".
The branch, master has been updated via 92fd43fcb2e4d6c2cee5655ceb5a62a11f82817b (commit) via e4178458b1e93766fdad3de25d4694a976af8f23 (commit) via 4f57d6ac43a050f6c50eb33d348bcf96daf7fddc (commit) via aeef7d9aa9f99114786af36c4457d3f8f8239121 (commit) from 0a9c5691c5ea692728851b2f5476670c05d38750 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit 92fd43fcb2e4d6c2cee5655ceb5a62a11f82817b Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 19 17:16:20 2018 +0200
linux-gen: pool: pool_t.base_addr offset has to be 64-bit
Enables using pools larger than UINT32_MAX.
Fixes: https://bugs.linaro.org/show_bug.cgi?id=3632
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c index 9e4ad1c7..687edb8f 100644 --- a/platform/linux-generic/odp_pool.c +++ b/platform/linux-generic/odp_pool.c @@ -83,10 +83,10 @@ static inline pool_t *pool_from_buf(odp_buffer_t buf) static inline odp_buffer_hdr_t *buf_hdr_from_index(pool_t *pool, uint32_t buffer_idx) { - uint32_t block_offset; + uint64_t block_offset; odp_buffer_hdr_t *buf_hdr;
- block_offset = buffer_idx * pool->block_size; + block_offset = buffer_idx * (uint64_t)pool->block_size;
/* clang requires cast to uintptr_t */ buf_hdr = (odp_buffer_hdr_t *)(uintptr_t)&pool->base_addr[block_offset]; @@ -236,7 +236,7 @@ static pool_t *reserve_pool(void)
static void init_buffers(pool_t *pool) { - uint32_t i; + uint64_t i; odp_buffer_hdr_t *buf_hdr; odp_packet_hdr_t *pkt_hdr; odp_shm_info_t shm_info;
commit e4178458b1e93766fdad3de25d4694a976af8f23 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 19 14:06:42 2018 +0200
linux-gen: pool: use 64-bit shm sizes
odp_shm_reserve() takes a 64-bit size argument. The previous 32-bit values could wrap around in case of very large pools.
Fixes: https://bugs.linaro.org/show_bug.cgi?id=3632
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/include/odp_pool_internal.h b/platform/linux-generic/include/odp_pool_internal.h index c5e73fe7..faa019f4 100644 --- a/platform/linux-generic/include/odp_pool_internal.h +++ b/platform/linux-generic/include/odp_pool_internal.h @@ -55,6 +55,8 @@ typedef struct pool_t { uint32_t ring_mask; odp_shm_t shm; odp_shm_t uarea_shm; + uint64_t shm_size; + uint64_t uarea_shm_size; int reserved; uint32_t num; uint32_t align; @@ -65,8 +67,6 @@ typedef struct pool_t { uint32_t max_len; uint32_t uarea_size; uint32_t block_size; - uint32_t shm_size; - uint32_t uarea_shm_size; uint8_t *base_addr; uint8_t *uarea_base_addr;
diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c index 7bea7b8c..9e4ad1c7 100644 --- a/platform/linux-generic/odp_pool.c +++ b/platform/linux-generic/odp_pool.c @@ -478,8 +478,8 @@ static odp_pool_t pool_create(const char *name, odp_pool_param_t *params, pool->tailroom = tailroom; pool->block_size = block_size; pool->uarea_size = uarea_size; - pool->shm_size = (num + num_extra) * block_size; - pool->uarea_shm_size = num * uarea_size; + pool->shm_size = (num + num_extra) * (uint64_t)block_size; + pool->uarea_shm_size = num * (uint64_t)uarea_size; pool->ext_desc = NULL; pool->ext_destroy = NULL;
@@ -959,9 +959,9 @@ void odp_pool_print(odp_pool_t pool_hdl) ODP_PRINT(" tailroom %u\n", pool->tailroom); ODP_PRINT(" block size %u\n", pool->block_size); ODP_PRINT(" uarea size %u\n", pool->uarea_size); - ODP_PRINT(" shm size %u\n", pool->shm_size); + ODP_PRINT(" shm size %" PRIu64 "\n", pool->shm_size); ODP_PRINT(" base addr %p\n", pool->base_addr); - ODP_PRINT(" uarea shm size %u\n", pool->uarea_shm_size); + ODP_PRINT(" uarea shm size %" PRIu64 "\n", pool->uarea_shm_size); ODP_PRINT(" uarea base addr %p\n", pool->uarea_base_addr); ODP_PRINT("\n"); }
commit 4f57d6ac43a050f6c50eb33d348bcf96daf7fddc Author: Michal Mazur mkm@semihalf.com Date: Wed Feb 21 21:58:17 2018 +0100
validation: pool: verify pool data range
Allocate maximum number of packets from pool and verify that packet data are located inside range returned by odp_pool_info.
Signed-off-by: Michal Mazur mkm@semihalf.com Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/validation/api/pool/pool.c b/test/validation/api/pool/pool.c index b5e0253b..2795e857 100644 --- a/test/validation/api/pool/pool.c +++ b/test/validation/api/pool/pool.c @@ -217,6 +217,59 @@ static void pool_test_info_packet(void) CU_ASSERT(odp_pool_destroy(pool) == 0); }
+static void pool_test_info_data_range(void) +{ + odp_pool_t pool; + odp_pool_info_t info; + odp_pool_param_t param; + odp_packet_t pkt[PKT_NUM]; + uint32_t i, num; + uintptr_t pool_len; + + odp_pool_param_init(¶m); + + param.type = ODP_POOL_PACKET; + param.pkt.num = PKT_NUM; + param.pkt.len = PKT_LEN; + + pool = odp_pool_create(NULL, ¶m); + CU_ASSERT_FATAL(pool != ODP_POOL_INVALID); + + CU_ASSERT_FATAL(odp_pool_info(pool, &info) == 0); + + pool_len = info.max_data_addr - info.min_data_addr + 1; + CU_ASSERT(pool_len >= PKT_NUM * PKT_LEN); + + num = 0; + + for (i = 0; i < PKT_NUM; i++) { + pkt[num] = odp_packet_alloc(pool, PKT_LEN); + CU_ASSERT(pkt[num] != ODP_PACKET_INVALID); + + if (pkt[num] != ODP_PACKET_INVALID) + num++; + } + + for (i = 0; i < num; i++) { + uintptr_t pkt_data, pkt_data_end; + uint32_t offset = 0, seg_len; + uint32_t pkt_len = odp_packet_len(pkt[i]); + + while (offset < pkt_len) { + pkt_data = (uintptr_t)odp_packet_offset(pkt[i], offset, + &seg_len, NULL); + pkt_data_end = pkt_data + seg_len - 1; + CU_ASSERT((pkt_data >= info.min_data_addr) && + (pkt_data_end <= info.max_data_addr)); + offset += seg_len; + } + + odp_packet_free(pkt[i]); + } + + CU_ASSERT(odp_pool_destroy(pool) == 0); +} + odp_testinfo_t pool_suite[] = { ODP_TEST_INFO(pool_test_create_destroy_buffer), ODP_TEST_INFO(pool_test_create_destroy_packet), @@ -225,6 +278,7 @@ odp_testinfo_t pool_suite[] = { ODP_TEST_INFO(pool_test_alloc_packet_subparam), ODP_TEST_INFO(pool_test_info_packet), ODP_TEST_INFO(pool_test_lookup_info_print), + ODP_TEST_INFO(pool_test_info_data_range), ODP_TEST_INFO_NULL, };
commit aeef7d9aa9f99114786af36c4457d3f8f8239121 Author: Michal Mazur mkm@semihalf.com Date: Wed Jan 31 16:32:54 2018 +0100
linux-generic: pool: return address range in pool info
Implement support in odp_pool_info function to provide address range of pool data available to application.
Signed-off-by: Michal Mazur mkm@semihalf.com Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c index 14433d08..7bea7b8c 100644 --- a/platform/linux-generic/odp_pool.c +++ b/platform/linux-generic/odp_pool.c @@ -693,6 +693,9 @@ int odp_pool_info(odp_pool_t pool_hdl, odp_pool_info_t *info) if (pool->params.type == ODP_POOL_PACKET) info->pkt.max_num = pool->num;
+ info->min_data_addr = (uintptr_t)pool->base_addr; + info->max_data_addr = (uintptr_t)pool->base_addr + pool->shm_size - 1; + return 0; }
-----------------------------------------------------------------------
Summary of changes: platform/linux-generic/include/odp_pool_internal.h | 4 +- platform/linux-generic/odp_pool.c | 17 ++++--- test/validation/api/pool/pool.c | 54 ++++++++++++++++++++++ 3 files changed, 66 insertions(+), 9 deletions(-)
hooks/post-receive