Message ID | 1421752692-24439-7-git-send-email-petri.savolainen@linaro.org |
---|---|
State | New |
Headers | show |
Core was generated by `./odp_buffer'. Program terminated with signal 11, Segmentation fault. #0 0x0000000000406614 in odp_buf_to_pool (buf=0x134a1300) at ./include/odp_buffer_pool_internal.h:358 358 return odp_pool_to_entry(buf->pool_hdl); (gdb) bt #0 0x0000000000406614 in odp_buf_to_pool (buf=0x134a1300) at ./include/odp_buffer_pool_internal.h:358 #1 0x0000000000407964 in odp_buffer_free (buf=2187936352) at odp_buffer_pool.c:518 #2 0x0000000000409666 in odp_packet_free (pkt=2187936352) at odp_packet.c:52 #3 0x000000000040256e in pool_alloc_type (type=1) at buffer/odp_buffer_pool_test.c:171 #4 0x00000000004025c3 in pool_alloc_buffer_raw () at buffer/odp_buffer_pool_test.c:179 #5 0x00007f81826a1f06 in run_single_test (pTest=0x191e0d0, pRunSummary=0x7f81828ab4c0) at TestRun.c:991 #6 0x00007f81826a1b3c in run_single_suite (pSuite=0x191c280, pRunSummary=0x7f81828ab4c0) at TestRun.c:876 #7 0x00007f818269f98b in CU_run_all_tests () at TestRun.c:367 #8 0x00007f81826a3e7d in basic_run_all_tests (pRegistry=0x0) at Basic.c:195 #9 0x00007f81826a3c1a in CU_basic_run_tests () at Basic.c:87 #10 0x000000000040592a in main () at common/odp_cunit_common.c:72 (gdb) p *buf Cannot access memory at address 0x134a1300 (gdb) l 353 return (pool_entry_t *)get_pool_entry(pool_handle_to_index(pool)); 354 } 355 356 static inline pool_entry_t *odp_buf_to_pool(odp_buffer_hdr_t *buf) 357 { 358 return odp_pool_to_entry(buf->pool_hdl); 359 } 360 361 static inline uint32_t odp_buffer_pool_segment_size(odp_buffer_pool_t pool) 362 { (gdb) On 01/20/2015 02:18 PM, Petri Savolainen wrote: > Removed odp_buffer_type() from API and made it internal. > > Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> > --- > platform/linux-generic/include/api/odp_buffer.h | 16 ---- > .../linux-generic/include/api/odp_buffer_pool.h | 4 + > .../linux-generic/include/odp_buffer_internal.h | 16 ++++ > platform/linux-generic/odp_buffer.c | 2 +- > platform/linux-generic/odp_buffer_pool.c | 4 +- > platform/linux-generic/odp_event.c | 4 +- > platform/linux-generic/odp_timer.c | 4 +- > test/validation/buffer/odp_buffer_pool_test.c | 88 +++++++++++++--------- > test/validation/buffer/odp_buffer_test.c | 4 +- > test/validation/buffer/odp_packet_test.c | 15 ++-- > test/validation/odp_pktio.c | 16 ++-- > test/validation/odp_timer.c | 2 +- > 12 files changed, 97 insertions(+), 78 deletions(-) > > diff --git a/platform/linux-generic/include/api/odp_buffer.h b/platform/linux-generic/include/api/odp_buffer.h > index 5f825a2..69d5779 100644 > --- a/platform/linux-generic/include/api/odp_buffer.h > +++ b/platform/linux-generic/include/api/odp_buffer.h > @@ -69,22 +69,6 @@ void *odp_buffer_addr(odp_buffer_t buf); > uint32_t odp_buffer_size(odp_buffer_t buf); > > /** > - * Buffer type > - * > - * @param buf Buffer handle > - * > - * @return Buffer type > - */ > -int odp_buffer_type(odp_buffer_t buf); > - > -#define ODP_BUFFER_TYPE_INVALID (-1) /**< Buffer type invalid */ > -#define ODP_BUFFER_TYPE_ANY 0 /**< Buffer that can hold any other > - buffer type */ > -#define ODP_BUFFER_TYPE_RAW 1 /**< Raw buffer, no additional metadata */ > -#define ODP_BUFFER_TYPE_PACKET 2 /**< Packet buffer */ > -#define ODP_BUFFER_TYPE_TIMEOUT 3 /**< Timeout buffer */ > - > -/** > * Tests if buffer is valid > * > * @param buf Buffer handle > diff --git a/platform/linux-generic/include/api/odp_buffer_pool.h b/platform/linux-generic/include/api/odp_buffer_pool.h > index 8380ac1..68fa69e 100644 > --- a/platform/linux-generic/include/api/odp_buffer_pool.h > +++ b/platform/linux-generic/include/api/odp_buffer_pool.h > @@ -51,6 +51,10 @@ typedef struct odp_buffer_pool_param_t { > int buf_type; /**< Buffer type */ > } odp_buffer_pool_param_t; > > +#define ODP_BUFFER_TYPE_RAW 1 /**< Raw buffer, no additional metadata */ > +#define ODP_BUFFER_TYPE_PACKET 2 /**< Packet buffer */ > +#define ODP_BUFFER_TYPE_TIMEOUT 3 /**< Timeout buffer */ > + > /** > * Create a buffer pool > * This routine is used to create a buffer pool. It take three > diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h > index 39b0b05..0d09531 100644 > --- a/platform/linux-generic/include/odp_buffer_internal.h > +++ b/platform/linux-generic/include/odp_buffer_internal.h > @@ -153,6 +153,22 @@ typedef struct { > /* Forward declarations */ > odp_buffer_t buffer_alloc(odp_buffer_pool_t pool, size_t size); > > + > +/* > + * Buffer type > + * > + * @param buf Buffer handle > + * > + * @return Buffer type > + */ > +int _odp_buffer_type(odp_buffer_t buf); > + > +#define _ODP_BUFFER_TYPE_INVALID (-1) /**< Buffer type invalid */ > +#define _ODP_BUFFER_TYPE_ANY 0 /**< Buffer that can hold any other > + buffer type */ > + > + > + > #ifdef __cplusplus > } > #endif > diff --git a/platform/linux-generic/odp_buffer.c b/platform/linux-generic/odp_buffer.c > index 939332a..e657e00 100644 > --- a/platform/linux-generic/odp_buffer.c > +++ b/platform/linux-generic/odp_buffer.c > @@ -40,7 +40,7 @@ uint32_t odp_buffer_size(odp_buffer_t buf) > } > > > -int odp_buffer_type(odp_buffer_t buf) > +int _odp_buffer_type(odp_buffer_t buf) > { > odp_buffer_hdr_t *hdr = odp_buf_to_hdr(buf); > > diff --git a/platform/linux-generic/odp_buffer_pool.c b/platform/linux-generic/odp_buffer_pool.c > index eedb380..202d1c7 100644 > --- a/platform/linux-generic/odp_buffer_pool.c > +++ b/platform/linux-generic/odp_buffer_pool.c > @@ -160,7 +160,7 @@ odp_buffer_pool_t odp_buffer_pool_create(const char *name, > break; > > case ODP_BUFFER_TYPE_PACKET: > - case ODP_BUFFER_TYPE_ANY: > + case _ODP_BUFFER_TYPE_ANY: > headroom = ODP_CONFIG_PACKET_HEADROOM; > tailroom = ODP_CONFIG_PACKET_TAILROOM; > unsegmented = params->buf_size > ODP_CONFIG_PACKET_BUF_LEN_MAX; > @@ -561,7 +561,7 @@ void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl) > pool->s.params.buf_type == ODP_BUFFER_TYPE_RAW ? "raw" : > (pool->s.params.buf_type == ODP_BUFFER_TYPE_PACKET ? "packet" : > (pool->s.params.buf_type == ODP_BUFFER_TYPE_TIMEOUT ? "timeout" : > - (pool->s.params.buf_type == ODP_BUFFER_TYPE_ANY ? "any" : > + (pool->s.params.buf_type == _ODP_BUFFER_TYPE_ANY ? "any" : > "unknown")))); > ODP_DBG(" pool storage %sODP managed\n", > pool->s.flags.user_supplied_shm ? > diff --git a/platform/linux-generic/odp_event.c b/platform/linux-generic/odp_event.c > index c646f42..285a19b 100644 > --- a/platform/linux-generic/odp_event.c > +++ b/platform/linux-generic/odp_event.c > @@ -6,6 +6,8 @@ > > #include <odp_event.h> > #include <odp_buffer.h> > +#include <odp_buffer_pool.h> > +#include <odp_buffer_internal.h> > > int odp_event_type(odp_event_t event) > { > @@ -13,7 +15,7 @@ int odp_event_type(odp_event_t event) > > buf = odp_buffer_from_event(event); > > - switch (odp_buffer_type(buf)) { > + switch (_odp_buffer_type(buf)) { > case ODP_BUFFER_TYPE_RAW: > return ODP_EVENT_BUFFER; > case ODP_BUFFER_TYPE_PACKET: > diff --git a/platform/linux-generic/odp_timer.c b/platform/linux-generic/odp_timer.c > index 322f97f..5d462ba 100644 > --- a/platform/linux-generic/odp_timer.c > +++ b/platform/linux-generic/odp_timer.c > @@ -557,7 +557,7 @@ static unsigned timer_expire(odp_timer_pool *tp, uint32_t idx, uint64_t tick) > #endif > if (odp_likely(tmo_buf != ODP_BUFFER_INVALID)) { > /* Fill in metadata fields in system timeout buffer */ > - if (odp_buffer_type(tmo_buf) == ODP_BUFFER_TYPE_TIMEOUT) { > + if (_odp_buffer_type(tmo_buf) == ODP_BUFFER_TYPE_TIMEOUT) { > /* Convert from buffer to timeout hdr */ > odp_timeout_hdr_t *tmo_hdr = > timeout_hdr_from_buf(tmo_buf); > @@ -798,7 +798,7 @@ int odp_timer_cancel(odp_timer_t hdl, odp_buffer_t *tmo_buf) > odp_timeout_t odp_timeout_from_buf(odp_buffer_t buf) > { > /* This check not mandated by the API specification */ > - if (odp_buffer_type(buf) != ODP_BUFFER_TYPE_TIMEOUT) > + if (_odp_buffer_type(buf) != ODP_BUFFER_TYPE_TIMEOUT) > ODP_ABORT("Buffer not a timeout"); > return (odp_timeout_t)timeout_hdr_from_buf(buf); > } > diff --git a/test/validation/buffer/odp_buffer_pool_test.c b/test/validation/buffer/odp_buffer_pool_test.c > index 6f5eaf7..850f856 100644 > --- a/test/validation/buffer/odp_buffer_pool_test.c > +++ b/test/validation/buffer/odp_buffer_pool_test.c > @@ -53,11 +53,6 @@ static void pool_create_destroy_timeout(void) > pool_create_destroy_type(ODP_BUFFER_TYPE_TIMEOUT); > } > > -static void pool_create_destroy_any(void) > -{ > - pool_create_destroy_type(ODP_BUFFER_TYPE_ANY); > -} > - > static void pool_create_destroy_raw_shm(void) > { > odp_buffer_pool_t pool; > @@ -113,64 +108,85 @@ static void pool_lookup_info_print(void) > CU_ASSERT(odp_buffer_pool_destroy(pool) == 0); > } > > -static void pool_alloc_buffer_type(int type) > +static void pool_alloc_type(int type) > { > odp_buffer_pool_t pool; > - const int buf_num = 3; > - const size_t buf_size = 1500; > - odp_buffer_t buffer[buf_num]; > - int buf_index; > + const int num = 3; > + const size_t size = 1500; > + odp_buffer_t buffer[num]; > + odp_packet_t packet[num]; > + odp_event_t ev; > + int index; > char wrong_type = 0, wrong_size = 0; > > - pool = pool_create(buf_num, buf_size, type); > + pool = pool_create(num, size, type); > odp_buffer_pool_print(pool); > > - /* Try to allocate buf_num buffers from the pool */ > - for (buf_index = 0; buf_index < buf_num; buf_index++) { > - buffer[buf_index] = odp_buffer_alloc(pool); > - if (buffer[buf_index] == ODP_BUFFER_INVALID) > + /* Try to allocate num items from the pool */ > + for (index = 0; index < num; index++) { > + switch (type) { > + case ODP_BUFFER_TYPE_RAW: > + buffer[index] = odp_buffer_alloc(pool); > + > + if (buffer[index] == ODP_BUFFER_INVALID) > + break; > + > + ev = odp_buffer_to_event(buffer[index]); > + if (odp_event_type(ev) != ODP_EVENT_BUFFER) > + wrong_type = 1; > + if (odp_buffer_size(buffer[index]) < size) > + wrong_size = 1; > + if (wrong_type || wrong_size) > + odp_buffer_print(buffer[index]); > + break; > + > + case ODP_BUFFER_TYPE_PACKET: > + packet[index] = odp_packet_alloc(pool, size); > + > + if (packet[index] == ODP_PACKET_INVALID) > + break; > + > + ev = odp_packet_to_event(packet[index]); > + if (odp_event_type(ev) != ODP_EVENT_PACKET) > + wrong_type = 1; > break; > - if (odp_buffer_type(buffer[buf_index]) != type) > - wrong_type = 1; > - if (odp_buffer_size(buffer[buf_index]) < buf_size) > - wrong_size = 1; > - if (wrong_type || wrong_size) > - odp_buffer_print(buffer[buf_index]); > + > + default: > + break; > + } > + > } > > - /* Check that the pool had at least buf_num buffers */ > - CU_ASSERT(buf_index == buf_num); > - /* buf_index points out of buffer[] or it point to an invalid buffer */ > - buf_index--; > + /* Check that the pool had at least num items */ > + CU_ASSERT(index == num); > + /* index points out of buffer[] or it point to an invalid buffer */ > + index--; > > /* Check that the pool had correct buffers */ > CU_ASSERT(wrong_type == 0); > CU_ASSERT(wrong_size == 0); > > - for (; buf_index >= 0; buf_index--) > - odp_buffer_free(buffer[buf_index]); > + for (; index >= 0; index--) { > + odp_buffer_free(buffer[index]); > + odp_packet_free(packet[index]); > + } > > CU_ASSERT(odp_buffer_pool_destroy(pool) == 0); > } > > static void pool_alloc_buffer_raw(void) > { > - pool_alloc_buffer_type(ODP_BUFFER_TYPE_RAW); > + pool_alloc_type(ODP_BUFFER_TYPE_RAW); > } > > static void pool_alloc_buffer_packet(void) > { > - pool_alloc_buffer_type(ODP_BUFFER_TYPE_PACKET); > + pool_alloc_type(ODP_BUFFER_TYPE_PACKET); > } > > static void pool_alloc_buffer_timeout(void) > { > - pool_alloc_buffer_type(ODP_BUFFER_TYPE_TIMEOUT); > -} > - > -static void pool_alloc_buffer_any(void) > -{ > - pool_alloc_buffer_type(ODP_BUFFER_TYPE_ANY); > + pool_alloc_type(ODP_BUFFER_TYPE_TIMEOUT); > } > > static void pool_free_buffer(void) > @@ -200,13 +216,11 @@ CU_TestInfo buffer_pool_tests[] = { > _CU_TEST_INFO(pool_create_destroy_raw), > _CU_TEST_INFO(pool_create_destroy_packet), > _CU_TEST_INFO(pool_create_destroy_timeout), > - _CU_TEST_INFO(pool_create_destroy_any), > _CU_TEST_INFO(pool_create_destroy_raw_shm), > _CU_TEST_INFO(pool_lookup_info_print), > _CU_TEST_INFO(pool_alloc_buffer_raw), > _CU_TEST_INFO(pool_alloc_buffer_packet), > _CU_TEST_INFO(pool_alloc_buffer_timeout), > - _CU_TEST_INFO(pool_alloc_buffer_any), > _CU_TEST_INFO(pool_free_buffer), > CU_TEST_INFO_NULL, > }; > diff --git a/test/validation/buffer/odp_buffer_test.c b/test/validation/buffer/odp_buffer_test.c > index 219a9ef..9fd5bb8 100644 > --- a/test/validation/buffer/odp_buffer_test.c > +++ b/test/validation/buffer/odp_buffer_test.c > @@ -38,9 +38,11 @@ int buffer_testsuite_finalize(void) > > static void buffer_management_basic(void) > { > + odp_event_t ev = odp_buffer_to_event(raw_buffer); > + > CU_ASSERT(odp_buffer_is_valid(raw_buffer) == 1); > CU_ASSERT(odp_buffer_pool(raw_buffer) != ODP_BUFFER_POOL_INVALID); > - CU_ASSERT(odp_buffer_type(raw_buffer) == ODP_BUFFER_TYPE_RAW); > + CU_ASSERT(odp_event_type(ev) == ODP_EVENT_BUFFER); > CU_ASSERT(odp_buffer_size(raw_buffer) >= raw_buffer_size); > CU_ASSERT(odp_buffer_addr(raw_buffer) != NULL); > odp_buffer_print(raw_buffer); > diff --git a/test/validation/buffer/odp_packet_test.c b/test/validation/buffer/odp_packet_test.c > index d073b49..63caec6 100644 > --- a/test/validation/buffer/odp_packet_test.c > +++ b/test/validation/buffer/odp_packet_test.c > @@ -85,18 +85,17 @@ static void packet_alloc_segmented(void) > odp_packet_free(pkt); > } > > -static void packet_buffer_conversion(void) > +static void packet_event_conversion(void) > { > odp_packet_t pkt = test_packet; > odp_packet_t tmp_pkt; > - odp_buffer_t buf; > + odp_event_t ev; > > - buf = odp_packet_to_buffer(pkt); > - CU_ASSERT_FATAL(buf != ODP_BUFFER_INVALID); > - CU_ASSERT(odp_buffer_type(buf) == ODP_BUFFER_TYPE_PACKET); > - CU_ASSERT(odp_buffer_size(buf) == odp_packet_buf_len(pkt)); > + ev = odp_packet_to_event(pkt); > + CU_ASSERT_FATAL(ev != ODP_EVENT_INVALID); > + CU_ASSERT(odp_event_type(ev) == ODP_EVENT_PACKET); > > - tmp_pkt = odp_packet_from_buffer(buf); > + tmp_pkt = odp_packet_from_event(ev); > CU_ASSERT_FATAL(tmp_pkt != ODP_PACKET_INVALID); > /** @todo: Need an API to compare packets */ > } > @@ -653,7 +652,7 @@ CU_TestInfo packet_tests[] = { > _CU_TEST_INFO(packet_headroom), > _CU_TEST_INFO(packet_tailroom), > _CU_TEST_INFO(packet_context), > - _CU_TEST_INFO(packet_buffer_conversion), > + _CU_TEST_INFO(packet_event_conversion), > _CU_TEST_INFO(packet_layer_offsets), > _CU_TEST_INFO(packet_segments), > _CU_TEST_INFO(packet_segment_last), > diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c > index b1eb61e..2e7b50b 100644 > --- a/test/validation/odp_pktio.c > +++ b/test/validation/odp_pktio.c > @@ -244,7 +244,7 @@ static int create_inq(odp_pktio_t pktio) > return odp_pktio_inq_setdef(pktio, inq_def); > } > > -static odp_buffer_t queue_deq_wait_time(odp_queue_t queue, uint64_t ns) > +static odp_event_t queue_deq_wait_time(odp_queue_t queue, uint64_t ns) > { > uint64_t start, now, diff; > odp_event_t ev; > @@ -254,12 +254,12 @@ static odp_buffer_t queue_deq_wait_time(odp_queue_t queue, uint64_t ns) > do { > ev = odp_queue_deq(queue); > if (ev != ODP_EVENT_INVALID) > - return odp_buffer_from_event(ev); > + return ev; > now = odp_time_cycles(); > diff = odp_time_diff_cycles(start, now); > } while (odp_time_cycles_to_ns(diff) < ns); > > - return ODP_BUFFER_INVALID; > + return ODP_EVENT_INVALID; > } > > static odp_packet_t wait_for_packet(odp_queue_t queue, > @@ -267,22 +267,20 @@ static odp_packet_t wait_for_packet(odp_queue_t queue, > { > uint64_t start, now, diff; > odp_event_t ev; > - odp_buffer_t buf; > odp_packet_t pkt = ODP_PACKET_INVALID; > > start = odp_time_cycles(); > > do { > if (queue != ODP_QUEUE_INVALID) { > - buf = queue_deq_wait_time(queue, ns); > + ev = queue_deq_wait_time(queue, ns); > } else { > ev = odp_schedule(NULL, ns); > - buf = odp_buffer_from_event(ev); > } > > - if (buf != ODP_BUFFER_INVALID && > - odp_buffer_type(buf) == ODP_BUFFER_TYPE_PACKET) { > - pkt = odp_packet_from_buffer(buf); > + if (ev != ODP_EVENT_INVALID && > + odp_event_type(ev) == ODP_EVENT_PACKET) { > + pkt = odp_packet_from_event(ev); > if (pktio_pkt_seq(pkt) == seq) > return pkt; > } > diff --git a/test/validation/odp_timer.c b/test/validation/odp_timer.c > index eca7e7f..adc1554 100644 > --- a/test/validation/odp_timer.c > +++ b/test/validation/odp_timer.c > @@ -49,7 +49,7 @@ static void handle_tmo(odp_buffer_t buf, bool stale, uint64_t prev_tick) > { > /* Use assert() for internal correctness checks of test program */ > assert(buf != ODP_BUFFER_INVALID); > - if (odp_buffer_type(buf) != ODP_BUFFER_TYPE_TIMEOUT) { > + if (odp_event_type(odp_buffer_to_event(buf)) != ODP_EVENT_TIMEOUT) { > /* Not a timeout buffer */ > CU_FAIL("Unexpected buffer type received"); > return;
Petri, you just did mistake in test. test/validation/buffer/odp_buffer_pool_test.c pool_alloc_type() case ODP_BUFFER_TYPE_RAW: buf = alloc_buf; case ODP_BUFFER_TYPE_PKT: packet = alloc_packet; .... Then you calll free for both buf and packet. But in one case you did not allocate packet, in other case you did not allocate buffer. Maxim. On 01/20/2015 05:29 PM, Maxim Uvarov wrote: > Core was generated by `./odp_buffer'. > Program terminated with signal 11, Segmentation fault. > #0 0x0000000000406614 in odp_buf_to_pool (buf=0x134a1300) at > ./include/odp_buffer_pool_internal.h:358 > 358 return odp_pool_to_entry(buf->pool_hdl); > (gdb) bt > #0 0x0000000000406614 in odp_buf_to_pool (buf=0x134a1300) at > ./include/odp_buffer_pool_internal.h:358 > #1 0x0000000000407964 in odp_buffer_free (buf=2187936352) at > odp_buffer_pool.c:518 > #2 0x0000000000409666 in odp_packet_free (pkt=2187936352) at > odp_packet.c:52 > #3 0x000000000040256e in pool_alloc_type (type=1) at > buffer/odp_buffer_pool_test.c:171 > #4 0x00000000004025c3 in pool_alloc_buffer_raw () at > buffer/odp_buffer_pool_test.c:179 > #5 0x00007f81826a1f06 in run_single_test (pTest=0x191e0d0, > pRunSummary=0x7f81828ab4c0) at TestRun.c:991 > #6 0x00007f81826a1b3c in run_single_suite (pSuite=0x191c280, > pRunSummary=0x7f81828ab4c0) at TestRun.c:876 > #7 0x00007f818269f98b in CU_run_all_tests () at TestRun.c:367 > #8 0x00007f81826a3e7d in basic_run_all_tests (pRegistry=0x0) at > Basic.c:195 > #9 0x00007f81826a3c1a in CU_basic_run_tests () at Basic.c:87 > #10 0x000000000040592a in main () at common/odp_cunit_common.c:72 > (gdb) p *buf > Cannot access memory at address 0x134a1300 > (gdb) l > 353 return (pool_entry_t > *)get_pool_entry(pool_handle_to_index(pool)); > 354 } > 355 > 356 static inline pool_entry_t *odp_buf_to_pool(odp_buffer_hdr_t *buf) > 357 { > 358 return odp_pool_to_entry(buf->pool_hdl); > 359 } > 360 > 361 static inline uint32_t > odp_buffer_pool_segment_size(odp_buffer_pool_t pool) > 362 { > (gdb) > > On 01/20/2015 02:18 PM, Petri Savolainen wrote: >> Removed odp_buffer_type() from API and made it internal. >> >> Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> >> --- >> platform/linux-generic/include/api/odp_buffer.h | 16 ---- >> .../linux-generic/include/api/odp_buffer_pool.h | 4 + >> .../linux-generic/include/odp_buffer_internal.h | 16 ++++ >> platform/linux-generic/odp_buffer.c | 2 +- >> platform/linux-generic/odp_buffer_pool.c | 4 +- >> platform/linux-generic/odp_event.c | 4 +- >> platform/linux-generic/odp_timer.c | 4 +- >> test/validation/buffer/odp_buffer_pool_test.c | 88 >> +++++++++++++--------- >> test/validation/buffer/odp_buffer_test.c | 4 +- >> test/validation/buffer/odp_packet_test.c | 15 ++-- >> test/validation/odp_pktio.c | 16 ++-- >> test/validation/odp_timer.c | 2 +- >> 12 files changed, 97 insertions(+), 78 deletions(-) >> >> diff --git a/platform/linux-generic/include/api/odp_buffer.h >> b/platform/linux-generic/include/api/odp_buffer.h >> index 5f825a2..69d5779 100644 >> --- a/platform/linux-generic/include/api/odp_buffer.h >> +++ b/platform/linux-generic/include/api/odp_buffer.h >> @@ -69,22 +69,6 @@ void *odp_buffer_addr(odp_buffer_t buf); >> uint32_t odp_buffer_size(odp_buffer_t buf); >> /** >> - * Buffer type >> - * >> - * @param buf Buffer handle >> - * >> - * @return Buffer type >> - */ >> -int odp_buffer_type(odp_buffer_t buf); >> - >> -#define ODP_BUFFER_TYPE_INVALID (-1) /**< Buffer type invalid */ >> -#define ODP_BUFFER_TYPE_ANY 0 /**< Buffer that can hold any >> other >> - buffer type */ >> -#define ODP_BUFFER_TYPE_RAW 1 /**< Raw buffer, no additional >> metadata */ >> -#define ODP_BUFFER_TYPE_PACKET 2 /**< Packet buffer */ >> -#define ODP_BUFFER_TYPE_TIMEOUT 3 /**< Timeout buffer */ >> - >> -/** >> * Tests if buffer is valid >> * >> * @param buf Buffer handle >> diff --git a/platform/linux-generic/include/api/odp_buffer_pool.h >> b/platform/linux-generic/include/api/odp_buffer_pool.h >> index 8380ac1..68fa69e 100644 >> --- a/platform/linux-generic/include/api/odp_buffer_pool.h >> +++ b/platform/linux-generic/include/api/odp_buffer_pool.h >> @@ -51,6 +51,10 @@ typedef struct odp_buffer_pool_param_t { >> int buf_type; /**< Buffer type */ >> } odp_buffer_pool_param_t; >> +#define ODP_BUFFER_TYPE_RAW 1 /**< Raw buffer, no >> additional metadata */ >> +#define ODP_BUFFER_TYPE_PACKET 2 /**< Packet buffer */ >> +#define ODP_BUFFER_TYPE_TIMEOUT 3 /**< Timeout buffer */ >> + >> /** >> * Create a buffer pool >> * This routine is used to create a buffer pool. It take three >> diff --git a/platform/linux-generic/include/odp_buffer_internal.h >> b/platform/linux-generic/include/odp_buffer_internal.h >> index 39b0b05..0d09531 100644 >> --- a/platform/linux-generic/include/odp_buffer_internal.h >> +++ b/platform/linux-generic/include/odp_buffer_internal.h >> @@ -153,6 +153,22 @@ typedef struct { >> /* Forward declarations */ >> odp_buffer_t buffer_alloc(odp_buffer_pool_t pool, size_t size); >> + >> +/* >> + * Buffer type >> + * >> + * @param buf Buffer handle >> + * >> + * @return Buffer type >> + */ >> +int _odp_buffer_type(odp_buffer_t buf); >> + >> +#define _ODP_BUFFER_TYPE_INVALID (-1) /**< Buffer type invalid */ >> +#define _ODP_BUFFER_TYPE_ANY 0 /**< Buffer that can hold any >> other >> + buffer type */ >> + >> + >> + >> #ifdef __cplusplus >> } >> #endif >> diff --git a/platform/linux-generic/odp_buffer.c >> b/platform/linux-generic/odp_buffer.c >> index 939332a..e657e00 100644 >> --- a/platform/linux-generic/odp_buffer.c >> +++ b/platform/linux-generic/odp_buffer.c >> @@ -40,7 +40,7 @@ uint32_t odp_buffer_size(odp_buffer_t buf) >> } >> -int odp_buffer_type(odp_buffer_t buf) >> +int _odp_buffer_type(odp_buffer_t buf) >> { >> odp_buffer_hdr_t *hdr = odp_buf_to_hdr(buf); >> diff --git a/platform/linux-generic/odp_buffer_pool.c >> b/platform/linux-generic/odp_buffer_pool.c >> index eedb380..202d1c7 100644 >> --- a/platform/linux-generic/odp_buffer_pool.c >> +++ b/platform/linux-generic/odp_buffer_pool.c >> @@ -160,7 +160,7 @@ odp_buffer_pool_t odp_buffer_pool_create(const >> char *name, >> break; >> case ODP_BUFFER_TYPE_PACKET: >> - case ODP_BUFFER_TYPE_ANY: >> + case _ODP_BUFFER_TYPE_ANY: >> headroom = ODP_CONFIG_PACKET_HEADROOM; >> tailroom = ODP_CONFIG_PACKET_TAILROOM; >> unsegmented = params->buf_size > >> ODP_CONFIG_PACKET_BUF_LEN_MAX; >> @@ -561,7 +561,7 @@ void odp_buffer_pool_print(odp_buffer_pool_t >> pool_hdl) >> pool->s.params.buf_type == ODP_BUFFER_TYPE_RAW ? "raw" : >> (pool->s.params.buf_type == ODP_BUFFER_TYPE_PACKET ? >> "packet" : >> (pool->s.params.buf_type == ODP_BUFFER_TYPE_TIMEOUT ? >> "timeout" : >> - (pool->s.params.buf_type == ODP_BUFFER_TYPE_ANY ? "any" : >> + (pool->s.params.buf_type == _ODP_BUFFER_TYPE_ANY ? "any" : >> "unknown")))); >> ODP_DBG(" pool storage %sODP managed\n", >> pool->s.flags.user_supplied_shm ? >> diff --git a/platform/linux-generic/odp_event.c >> b/platform/linux-generic/odp_event.c >> index c646f42..285a19b 100644 >> --- a/platform/linux-generic/odp_event.c >> +++ b/platform/linux-generic/odp_event.c >> @@ -6,6 +6,8 @@ >> #include <odp_event.h> >> #include <odp_buffer.h> >> +#include <odp_buffer_pool.h> >> +#include <odp_buffer_internal.h> >> int odp_event_type(odp_event_t event) >> { >> @@ -13,7 +15,7 @@ int odp_event_type(odp_event_t event) >> buf = odp_buffer_from_event(event); >> - switch (odp_buffer_type(buf)) { >> + switch (_odp_buffer_type(buf)) { >> case ODP_BUFFER_TYPE_RAW: >> return ODP_EVENT_BUFFER; >> case ODP_BUFFER_TYPE_PACKET: >> diff --git a/platform/linux-generic/odp_timer.c >> b/platform/linux-generic/odp_timer.c >> index 322f97f..5d462ba 100644 >> --- a/platform/linux-generic/odp_timer.c >> +++ b/platform/linux-generic/odp_timer.c >> @@ -557,7 +557,7 @@ static unsigned timer_expire(odp_timer_pool *tp, >> uint32_t idx, uint64_t tick) >> #endif >> if (odp_likely(tmo_buf != ODP_BUFFER_INVALID)) { >> /* Fill in metadata fields in system timeout buffer */ >> - if (odp_buffer_type(tmo_buf) == ODP_BUFFER_TYPE_TIMEOUT) { >> + if (_odp_buffer_type(tmo_buf) == ODP_BUFFER_TYPE_TIMEOUT) { >> /* Convert from buffer to timeout hdr */ >> odp_timeout_hdr_t *tmo_hdr = >> timeout_hdr_from_buf(tmo_buf); >> @@ -798,7 +798,7 @@ int odp_timer_cancel(odp_timer_t hdl, >> odp_buffer_t *tmo_buf) >> odp_timeout_t odp_timeout_from_buf(odp_buffer_t buf) >> { >> /* This check not mandated by the API specification */ >> - if (odp_buffer_type(buf) != ODP_BUFFER_TYPE_TIMEOUT) >> + if (_odp_buffer_type(buf) != ODP_BUFFER_TYPE_TIMEOUT) >> ODP_ABORT("Buffer not a timeout"); >> return (odp_timeout_t)timeout_hdr_from_buf(buf); >> } >> diff --git a/test/validation/buffer/odp_buffer_pool_test.c >> b/test/validation/buffer/odp_buffer_pool_test.c >> index 6f5eaf7..850f856 100644 >> --- a/test/validation/buffer/odp_buffer_pool_test.c >> +++ b/test/validation/buffer/odp_buffer_pool_test.c >> @@ -53,11 +53,6 @@ static void pool_create_destroy_timeout(void) >> pool_create_destroy_type(ODP_BUFFER_TYPE_TIMEOUT); >> } >> -static void pool_create_destroy_any(void) >> -{ >> - pool_create_destroy_type(ODP_BUFFER_TYPE_ANY); >> -} >> - >> static void pool_create_destroy_raw_shm(void) >> { >> odp_buffer_pool_t pool; >> @@ -113,64 +108,85 @@ static void pool_lookup_info_print(void) >> CU_ASSERT(odp_buffer_pool_destroy(pool) == 0); >> } >> -static void pool_alloc_buffer_type(int type) >> +static void pool_alloc_type(int type) >> { >> odp_buffer_pool_t pool; >> - const int buf_num = 3; >> - const size_t buf_size = 1500; >> - odp_buffer_t buffer[buf_num]; >> - int buf_index; >> + const int num = 3; >> + const size_t size = 1500; >> + odp_buffer_t buffer[num]; >> + odp_packet_t packet[num]; >> + odp_event_t ev; >> + int index; >> char wrong_type = 0, wrong_size = 0; >> - pool = pool_create(buf_num, buf_size, type); >> + pool = pool_create(num, size, type); >> odp_buffer_pool_print(pool); >> - /* Try to allocate buf_num buffers from the pool */ >> - for (buf_index = 0; buf_index < buf_num; buf_index++) { >> - buffer[buf_index] = odp_buffer_alloc(pool); >> - if (buffer[buf_index] == ODP_BUFFER_INVALID) >> + /* Try to allocate num items from the pool */ >> + for (index = 0; index < num; index++) { >> + switch (type) { >> + case ODP_BUFFER_TYPE_RAW: >> + buffer[index] = odp_buffer_alloc(pool); >> + >> + if (buffer[index] == ODP_BUFFER_INVALID) >> + break; >> + >> + ev = odp_buffer_to_event(buffer[index]); >> + if (odp_event_type(ev) != ODP_EVENT_BUFFER) >> + wrong_type = 1; >> + if (odp_buffer_size(buffer[index]) < size) >> + wrong_size = 1; >> + if (wrong_type || wrong_size) >> + odp_buffer_print(buffer[index]); >> + break; >> + >> + case ODP_BUFFER_TYPE_PACKET: >> + packet[index] = odp_packet_alloc(pool, size); >> + >> + if (packet[index] == ODP_PACKET_INVALID) >> + break; >> + >> + ev = odp_packet_to_event(packet[index]); >> + if (odp_event_type(ev) != ODP_EVENT_PACKET) >> + wrong_type = 1; >> break; >> - if (odp_buffer_type(buffer[buf_index]) != type) >> - wrong_type = 1; >> - if (odp_buffer_size(buffer[buf_index]) < buf_size) >> - wrong_size = 1; >> - if (wrong_type || wrong_size) >> - odp_buffer_print(buffer[buf_index]); >> + >> + default: >> + break; >> + } >> + >> } >> - /* Check that the pool had at least buf_num buffers */ >> - CU_ASSERT(buf_index == buf_num); >> - /* buf_index points out of buffer[] or it point to an invalid >> buffer */ >> - buf_index--; >> + /* Check that the pool had at least num items */ >> + CU_ASSERT(index == num); >> + /* index points out of buffer[] or it point to an invalid buffer */ >> + index--; >> /* Check that the pool had correct buffers */ >> CU_ASSERT(wrong_type == 0); >> CU_ASSERT(wrong_size == 0); >> - for (; buf_index >= 0; buf_index--) >> - odp_buffer_free(buffer[buf_index]); >> + for (; index >= 0; index--) { >> + odp_buffer_free(buffer[index]); >> + odp_packet_free(packet[index]); >> + } >> CU_ASSERT(odp_buffer_pool_destroy(pool) == 0); >> } >> static void pool_alloc_buffer_raw(void) >> { >> - pool_alloc_buffer_type(ODP_BUFFER_TYPE_RAW); >> + pool_alloc_type(ODP_BUFFER_TYPE_RAW); >> } >> static void pool_alloc_buffer_packet(void) >> { >> - pool_alloc_buffer_type(ODP_BUFFER_TYPE_PACKET); >> + pool_alloc_type(ODP_BUFFER_TYPE_PACKET); >> } >> static void pool_alloc_buffer_timeout(void) >> { >> - pool_alloc_buffer_type(ODP_BUFFER_TYPE_TIMEOUT); >> -} >> - >> -static void pool_alloc_buffer_any(void) >> -{ >> - pool_alloc_buffer_type(ODP_BUFFER_TYPE_ANY); >> + pool_alloc_type(ODP_BUFFER_TYPE_TIMEOUT); >> } >> static void pool_free_buffer(void) >> @@ -200,13 +216,11 @@ CU_TestInfo buffer_pool_tests[] = { >> _CU_TEST_INFO(pool_create_destroy_raw), >> _CU_TEST_INFO(pool_create_destroy_packet), >> _CU_TEST_INFO(pool_create_destroy_timeout), >> - _CU_TEST_INFO(pool_create_destroy_any), >> _CU_TEST_INFO(pool_create_destroy_raw_shm), >> _CU_TEST_INFO(pool_lookup_info_print), >> _CU_TEST_INFO(pool_alloc_buffer_raw), >> _CU_TEST_INFO(pool_alloc_buffer_packet), >> _CU_TEST_INFO(pool_alloc_buffer_timeout), >> - _CU_TEST_INFO(pool_alloc_buffer_any), >> _CU_TEST_INFO(pool_free_buffer), >> CU_TEST_INFO_NULL, >> }; >> diff --git a/test/validation/buffer/odp_buffer_test.c >> b/test/validation/buffer/odp_buffer_test.c >> index 219a9ef..9fd5bb8 100644 >> --- a/test/validation/buffer/odp_buffer_test.c >> +++ b/test/validation/buffer/odp_buffer_test.c >> @@ -38,9 +38,11 @@ int buffer_testsuite_finalize(void) >> static void buffer_management_basic(void) >> { >> + odp_event_t ev = odp_buffer_to_event(raw_buffer); >> + >> CU_ASSERT(odp_buffer_is_valid(raw_buffer) == 1); >> CU_ASSERT(odp_buffer_pool(raw_buffer) != ODP_BUFFER_POOL_INVALID); >> - CU_ASSERT(odp_buffer_type(raw_buffer) == ODP_BUFFER_TYPE_RAW); >> + CU_ASSERT(odp_event_type(ev) == ODP_EVENT_BUFFER); >> CU_ASSERT(odp_buffer_size(raw_buffer) >= raw_buffer_size); >> CU_ASSERT(odp_buffer_addr(raw_buffer) != NULL); >> odp_buffer_print(raw_buffer); >> diff --git a/test/validation/buffer/odp_packet_test.c >> b/test/validation/buffer/odp_packet_test.c >> index d073b49..63caec6 100644 >> --- a/test/validation/buffer/odp_packet_test.c >> +++ b/test/validation/buffer/odp_packet_test.c >> @@ -85,18 +85,17 @@ static void packet_alloc_segmented(void) >> odp_packet_free(pkt); >> } >> -static void packet_buffer_conversion(void) >> +static void packet_event_conversion(void) >> { >> odp_packet_t pkt = test_packet; >> odp_packet_t tmp_pkt; >> - odp_buffer_t buf; >> + odp_event_t ev; >> - buf = odp_packet_to_buffer(pkt); >> - CU_ASSERT_FATAL(buf != ODP_BUFFER_INVALID); >> - CU_ASSERT(odp_buffer_type(buf) == ODP_BUFFER_TYPE_PACKET); >> - CU_ASSERT(odp_buffer_size(buf) == odp_packet_buf_len(pkt)); >> + ev = odp_packet_to_event(pkt); >> + CU_ASSERT_FATAL(ev != ODP_EVENT_INVALID); >> + CU_ASSERT(odp_event_type(ev) == ODP_EVENT_PACKET); >> - tmp_pkt = odp_packet_from_buffer(buf); >> + tmp_pkt = odp_packet_from_event(ev); >> CU_ASSERT_FATAL(tmp_pkt != ODP_PACKET_INVALID); >> /** @todo: Need an API to compare packets */ >> } >> @@ -653,7 +652,7 @@ CU_TestInfo packet_tests[] = { >> _CU_TEST_INFO(packet_headroom), >> _CU_TEST_INFO(packet_tailroom), >> _CU_TEST_INFO(packet_context), >> - _CU_TEST_INFO(packet_buffer_conversion), >> + _CU_TEST_INFO(packet_event_conversion), >> _CU_TEST_INFO(packet_layer_offsets), >> _CU_TEST_INFO(packet_segments), >> _CU_TEST_INFO(packet_segment_last), >> diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c >> index b1eb61e..2e7b50b 100644 >> --- a/test/validation/odp_pktio.c >> +++ b/test/validation/odp_pktio.c >> @@ -244,7 +244,7 @@ static int create_inq(odp_pktio_t pktio) >> return odp_pktio_inq_setdef(pktio, inq_def); >> } >> -static odp_buffer_t queue_deq_wait_time(odp_queue_t queue, >> uint64_t ns) >> +static odp_event_t queue_deq_wait_time(odp_queue_t queue, uint64_t ns) >> { >> uint64_t start, now, diff; >> odp_event_t ev; >> @@ -254,12 +254,12 @@ static odp_buffer_t >> queue_deq_wait_time(odp_queue_t queue, uint64_t ns) >> do { >> ev = odp_queue_deq(queue); >> if (ev != ODP_EVENT_INVALID) >> - return odp_buffer_from_event(ev); >> + return ev; >> now = odp_time_cycles(); >> diff = odp_time_diff_cycles(start, now); >> } while (odp_time_cycles_to_ns(diff) < ns); >> - return ODP_BUFFER_INVALID; >> + return ODP_EVENT_INVALID; >> } >> static odp_packet_t wait_for_packet(odp_queue_t queue, >> @@ -267,22 +267,20 @@ static odp_packet_t wait_for_packet(odp_queue_t >> queue, >> { >> uint64_t start, now, diff; >> odp_event_t ev; >> - odp_buffer_t buf; >> odp_packet_t pkt = ODP_PACKET_INVALID; >> start = odp_time_cycles(); >> do { >> if (queue != ODP_QUEUE_INVALID) { >> - buf = queue_deq_wait_time(queue, ns); >> + ev = queue_deq_wait_time(queue, ns); >> } else { >> ev = odp_schedule(NULL, ns); >> - buf = odp_buffer_from_event(ev); >> } >> - if (buf != ODP_BUFFER_INVALID && >> - odp_buffer_type(buf) == ODP_BUFFER_TYPE_PACKET) { >> - pkt = odp_packet_from_buffer(buf); >> + if (ev != ODP_EVENT_INVALID && >> + odp_event_type(ev) == ODP_EVENT_PACKET) { >> + pkt = odp_packet_from_event(ev); >> if (pktio_pkt_seq(pkt) == seq) >> return pkt; >> } >> diff --git a/test/validation/odp_timer.c b/test/validation/odp_timer.c >> index eca7e7f..adc1554 100644 >> --- a/test/validation/odp_timer.c >> +++ b/test/validation/odp_timer.c >> @@ -49,7 +49,7 @@ static void handle_tmo(odp_buffer_t buf, bool >> stale, uint64_t prev_tick) >> { >> /* Use assert() for internal correctness checks of test program */ >> assert(buf != ODP_BUFFER_INVALID); >> - if (odp_buffer_type(buf) != ODP_BUFFER_TYPE_TIMEOUT) { >> + if (odp_event_type(odp_buffer_to_event(buf)) != >> ODP_EVENT_TIMEOUT) { >> /* Not a timeout buffer */ >> CU_FAIL("Unexpected buffer type received"); >> return; >
diff --git a/platform/linux-generic/include/api/odp_buffer.h b/platform/linux-generic/include/api/odp_buffer.h index 5f825a2..69d5779 100644 --- a/platform/linux-generic/include/api/odp_buffer.h +++ b/platform/linux-generic/include/api/odp_buffer.h @@ -69,22 +69,6 @@ void *odp_buffer_addr(odp_buffer_t buf); uint32_t odp_buffer_size(odp_buffer_t buf); /** - * Buffer type - * - * @param buf Buffer handle - * - * @return Buffer type - */ -int odp_buffer_type(odp_buffer_t buf); - -#define ODP_BUFFER_TYPE_INVALID (-1) /**< Buffer type invalid */ -#define ODP_BUFFER_TYPE_ANY 0 /**< Buffer that can hold any other - buffer type */ -#define ODP_BUFFER_TYPE_RAW 1 /**< Raw buffer, no additional metadata */ -#define ODP_BUFFER_TYPE_PACKET 2 /**< Packet buffer */ -#define ODP_BUFFER_TYPE_TIMEOUT 3 /**< Timeout buffer */ - -/** * Tests if buffer is valid * * @param buf Buffer handle diff --git a/platform/linux-generic/include/api/odp_buffer_pool.h b/platform/linux-generic/include/api/odp_buffer_pool.h index 8380ac1..68fa69e 100644 --- a/platform/linux-generic/include/api/odp_buffer_pool.h +++ b/platform/linux-generic/include/api/odp_buffer_pool.h @@ -51,6 +51,10 @@ typedef struct odp_buffer_pool_param_t { int buf_type; /**< Buffer type */ } odp_buffer_pool_param_t; +#define ODP_BUFFER_TYPE_RAW 1 /**< Raw buffer, no additional metadata */ +#define ODP_BUFFER_TYPE_PACKET 2 /**< Packet buffer */ +#define ODP_BUFFER_TYPE_TIMEOUT 3 /**< Timeout buffer */ + /** * Create a buffer pool * This routine is used to create a buffer pool. It take three diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h index 39b0b05..0d09531 100644 --- a/platform/linux-generic/include/odp_buffer_internal.h +++ b/platform/linux-generic/include/odp_buffer_internal.h @@ -153,6 +153,22 @@ typedef struct { /* Forward declarations */ odp_buffer_t buffer_alloc(odp_buffer_pool_t pool, size_t size); + +/* + * Buffer type + * + * @param buf Buffer handle + * + * @return Buffer type + */ +int _odp_buffer_type(odp_buffer_t buf); + +#define _ODP_BUFFER_TYPE_INVALID (-1) /**< Buffer type invalid */ +#define _ODP_BUFFER_TYPE_ANY 0 /**< Buffer that can hold any other + buffer type */ + + + #ifdef __cplusplus } #endif diff --git a/platform/linux-generic/odp_buffer.c b/platform/linux-generic/odp_buffer.c index 939332a..e657e00 100644 --- a/platform/linux-generic/odp_buffer.c +++ b/platform/linux-generic/odp_buffer.c @@ -40,7 +40,7 @@ uint32_t odp_buffer_size(odp_buffer_t buf) } -int odp_buffer_type(odp_buffer_t buf) +int _odp_buffer_type(odp_buffer_t buf) { odp_buffer_hdr_t *hdr = odp_buf_to_hdr(buf); diff --git a/platform/linux-generic/odp_buffer_pool.c b/platform/linux-generic/odp_buffer_pool.c index eedb380..202d1c7 100644 --- a/platform/linux-generic/odp_buffer_pool.c +++ b/platform/linux-generic/odp_buffer_pool.c @@ -160,7 +160,7 @@ odp_buffer_pool_t odp_buffer_pool_create(const char *name, break; case ODP_BUFFER_TYPE_PACKET: - case ODP_BUFFER_TYPE_ANY: + case _ODP_BUFFER_TYPE_ANY: headroom = ODP_CONFIG_PACKET_HEADROOM; tailroom = ODP_CONFIG_PACKET_TAILROOM; unsegmented = params->buf_size > ODP_CONFIG_PACKET_BUF_LEN_MAX; @@ -561,7 +561,7 @@ void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl) pool->s.params.buf_type == ODP_BUFFER_TYPE_RAW ? "raw" : (pool->s.params.buf_type == ODP_BUFFER_TYPE_PACKET ? "packet" : (pool->s.params.buf_type == ODP_BUFFER_TYPE_TIMEOUT ? "timeout" : - (pool->s.params.buf_type == ODP_BUFFER_TYPE_ANY ? "any" : + (pool->s.params.buf_type == _ODP_BUFFER_TYPE_ANY ? "any" : "unknown")))); ODP_DBG(" pool storage %sODP managed\n", pool->s.flags.user_supplied_shm ? diff --git a/platform/linux-generic/odp_event.c b/platform/linux-generic/odp_event.c index c646f42..285a19b 100644 --- a/platform/linux-generic/odp_event.c +++ b/platform/linux-generic/odp_event.c @@ -6,6 +6,8 @@ #include <odp_event.h> #include <odp_buffer.h> +#include <odp_buffer_pool.h> +#include <odp_buffer_internal.h> int odp_event_type(odp_event_t event) { @@ -13,7 +15,7 @@ int odp_event_type(odp_event_t event) buf = odp_buffer_from_event(event); - switch (odp_buffer_type(buf)) { + switch (_odp_buffer_type(buf)) { case ODP_BUFFER_TYPE_RAW: return ODP_EVENT_BUFFER; case ODP_BUFFER_TYPE_PACKET: diff --git a/platform/linux-generic/odp_timer.c b/platform/linux-generic/odp_timer.c index 322f97f..5d462ba 100644 --- a/platform/linux-generic/odp_timer.c +++ b/platform/linux-generic/odp_timer.c @@ -557,7 +557,7 @@ static unsigned timer_expire(odp_timer_pool *tp, uint32_t idx, uint64_t tick) #endif if (odp_likely(tmo_buf != ODP_BUFFER_INVALID)) { /* Fill in metadata fields in system timeout buffer */ - if (odp_buffer_type(tmo_buf) == ODP_BUFFER_TYPE_TIMEOUT) { + if (_odp_buffer_type(tmo_buf) == ODP_BUFFER_TYPE_TIMEOUT) { /* Convert from buffer to timeout hdr */ odp_timeout_hdr_t *tmo_hdr = timeout_hdr_from_buf(tmo_buf); @@ -798,7 +798,7 @@ int odp_timer_cancel(odp_timer_t hdl, odp_buffer_t *tmo_buf) odp_timeout_t odp_timeout_from_buf(odp_buffer_t buf) { /* This check not mandated by the API specification */ - if (odp_buffer_type(buf) != ODP_BUFFER_TYPE_TIMEOUT) + if (_odp_buffer_type(buf) != ODP_BUFFER_TYPE_TIMEOUT) ODP_ABORT("Buffer not a timeout"); return (odp_timeout_t)timeout_hdr_from_buf(buf); } diff --git a/test/validation/buffer/odp_buffer_pool_test.c b/test/validation/buffer/odp_buffer_pool_test.c index 6f5eaf7..850f856 100644 --- a/test/validation/buffer/odp_buffer_pool_test.c +++ b/test/validation/buffer/odp_buffer_pool_test.c @@ -53,11 +53,6 @@ static void pool_create_destroy_timeout(void) pool_create_destroy_type(ODP_BUFFER_TYPE_TIMEOUT); } -static void pool_create_destroy_any(void) -{ - pool_create_destroy_type(ODP_BUFFER_TYPE_ANY); -} - static void pool_create_destroy_raw_shm(void) { odp_buffer_pool_t pool; @@ -113,64 +108,85 @@ static void pool_lookup_info_print(void) CU_ASSERT(odp_buffer_pool_destroy(pool) == 0); } -static void pool_alloc_buffer_type(int type) +static void pool_alloc_type(int type) { odp_buffer_pool_t pool; - const int buf_num = 3; - const size_t buf_size = 1500; - odp_buffer_t buffer[buf_num]; - int buf_index; + const int num = 3; + const size_t size = 1500; + odp_buffer_t buffer[num]; + odp_packet_t packet[num]; + odp_event_t ev; + int index; char wrong_type = 0, wrong_size = 0; - pool = pool_create(buf_num, buf_size, type); + pool = pool_create(num, size, type); odp_buffer_pool_print(pool); - /* Try to allocate buf_num buffers from the pool */ - for (buf_index = 0; buf_index < buf_num; buf_index++) { - buffer[buf_index] = odp_buffer_alloc(pool); - if (buffer[buf_index] == ODP_BUFFER_INVALID) + /* Try to allocate num items from the pool */ + for (index = 0; index < num; index++) { + switch (type) { + case ODP_BUFFER_TYPE_RAW: + buffer[index] = odp_buffer_alloc(pool); + + if (buffer[index] == ODP_BUFFER_INVALID) + break; + + ev = odp_buffer_to_event(buffer[index]); + if (odp_event_type(ev) != ODP_EVENT_BUFFER) + wrong_type = 1; + if (odp_buffer_size(buffer[index]) < size) + wrong_size = 1; + if (wrong_type || wrong_size) + odp_buffer_print(buffer[index]); + break; + + case ODP_BUFFER_TYPE_PACKET: + packet[index] = odp_packet_alloc(pool, size); + + if (packet[index] == ODP_PACKET_INVALID) + break; + + ev = odp_packet_to_event(packet[index]); + if (odp_event_type(ev) != ODP_EVENT_PACKET) + wrong_type = 1; break; - if (odp_buffer_type(buffer[buf_index]) != type) - wrong_type = 1; - if (odp_buffer_size(buffer[buf_index]) < buf_size) - wrong_size = 1; - if (wrong_type || wrong_size) - odp_buffer_print(buffer[buf_index]); + + default: + break; + } + } - /* Check that the pool had at least buf_num buffers */ - CU_ASSERT(buf_index == buf_num); - /* buf_index points out of buffer[] or it point to an invalid buffer */ - buf_index--; + /* Check that the pool had at least num items */ + CU_ASSERT(index == num); + /* index points out of buffer[] or it point to an invalid buffer */ + index--; /* Check that the pool had correct buffers */ CU_ASSERT(wrong_type == 0); CU_ASSERT(wrong_size == 0); - for (; buf_index >= 0; buf_index--) - odp_buffer_free(buffer[buf_index]); + for (; index >= 0; index--) { + odp_buffer_free(buffer[index]); + odp_packet_free(packet[index]); + } CU_ASSERT(odp_buffer_pool_destroy(pool) == 0); } static void pool_alloc_buffer_raw(void) { - pool_alloc_buffer_type(ODP_BUFFER_TYPE_RAW); + pool_alloc_type(ODP_BUFFER_TYPE_RAW); } static void pool_alloc_buffer_packet(void) { - pool_alloc_buffer_type(ODP_BUFFER_TYPE_PACKET); + pool_alloc_type(ODP_BUFFER_TYPE_PACKET); } static void pool_alloc_buffer_timeout(void) { - pool_alloc_buffer_type(ODP_BUFFER_TYPE_TIMEOUT); -} - -static void pool_alloc_buffer_any(void) -{ - pool_alloc_buffer_type(ODP_BUFFER_TYPE_ANY); + pool_alloc_type(ODP_BUFFER_TYPE_TIMEOUT); } static void pool_free_buffer(void) @@ -200,13 +216,11 @@ CU_TestInfo buffer_pool_tests[] = { _CU_TEST_INFO(pool_create_destroy_raw), _CU_TEST_INFO(pool_create_destroy_packet), _CU_TEST_INFO(pool_create_destroy_timeout), - _CU_TEST_INFO(pool_create_destroy_any), _CU_TEST_INFO(pool_create_destroy_raw_shm), _CU_TEST_INFO(pool_lookup_info_print), _CU_TEST_INFO(pool_alloc_buffer_raw), _CU_TEST_INFO(pool_alloc_buffer_packet), _CU_TEST_INFO(pool_alloc_buffer_timeout), - _CU_TEST_INFO(pool_alloc_buffer_any), _CU_TEST_INFO(pool_free_buffer), CU_TEST_INFO_NULL, }; diff --git a/test/validation/buffer/odp_buffer_test.c b/test/validation/buffer/odp_buffer_test.c index 219a9ef..9fd5bb8 100644 --- a/test/validation/buffer/odp_buffer_test.c +++ b/test/validation/buffer/odp_buffer_test.c @@ -38,9 +38,11 @@ int buffer_testsuite_finalize(void) static void buffer_management_basic(void) { + odp_event_t ev = odp_buffer_to_event(raw_buffer); + CU_ASSERT(odp_buffer_is_valid(raw_buffer) == 1); CU_ASSERT(odp_buffer_pool(raw_buffer) != ODP_BUFFER_POOL_INVALID); - CU_ASSERT(odp_buffer_type(raw_buffer) == ODP_BUFFER_TYPE_RAW); + CU_ASSERT(odp_event_type(ev) == ODP_EVENT_BUFFER); CU_ASSERT(odp_buffer_size(raw_buffer) >= raw_buffer_size); CU_ASSERT(odp_buffer_addr(raw_buffer) != NULL); odp_buffer_print(raw_buffer); diff --git a/test/validation/buffer/odp_packet_test.c b/test/validation/buffer/odp_packet_test.c index d073b49..63caec6 100644 --- a/test/validation/buffer/odp_packet_test.c +++ b/test/validation/buffer/odp_packet_test.c @@ -85,18 +85,17 @@ static void packet_alloc_segmented(void) odp_packet_free(pkt); } -static void packet_buffer_conversion(void) +static void packet_event_conversion(void) { odp_packet_t pkt = test_packet; odp_packet_t tmp_pkt; - odp_buffer_t buf; + odp_event_t ev; - buf = odp_packet_to_buffer(pkt); - CU_ASSERT_FATAL(buf != ODP_BUFFER_INVALID); - CU_ASSERT(odp_buffer_type(buf) == ODP_BUFFER_TYPE_PACKET); - CU_ASSERT(odp_buffer_size(buf) == odp_packet_buf_len(pkt)); + ev = odp_packet_to_event(pkt); + CU_ASSERT_FATAL(ev != ODP_EVENT_INVALID); + CU_ASSERT(odp_event_type(ev) == ODP_EVENT_PACKET); - tmp_pkt = odp_packet_from_buffer(buf); + tmp_pkt = odp_packet_from_event(ev); CU_ASSERT_FATAL(tmp_pkt != ODP_PACKET_INVALID); /** @todo: Need an API to compare packets */ } @@ -653,7 +652,7 @@ CU_TestInfo packet_tests[] = { _CU_TEST_INFO(packet_headroom), _CU_TEST_INFO(packet_tailroom), _CU_TEST_INFO(packet_context), - _CU_TEST_INFO(packet_buffer_conversion), + _CU_TEST_INFO(packet_event_conversion), _CU_TEST_INFO(packet_layer_offsets), _CU_TEST_INFO(packet_segments), _CU_TEST_INFO(packet_segment_last), diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c index b1eb61e..2e7b50b 100644 --- a/test/validation/odp_pktio.c +++ b/test/validation/odp_pktio.c @@ -244,7 +244,7 @@ static int create_inq(odp_pktio_t pktio) return odp_pktio_inq_setdef(pktio, inq_def); } -static odp_buffer_t queue_deq_wait_time(odp_queue_t queue, uint64_t ns) +static odp_event_t queue_deq_wait_time(odp_queue_t queue, uint64_t ns) { uint64_t start, now, diff; odp_event_t ev; @@ -254,12 +254,12 @@ static odp_buffer_t queue_deq_wait_time(odp_queue_t queue, uint64_t ns) do { ev = odp_queue_deq(queue); if (ev != ODP_EVENT_INVALID) - return odp_buffer_from_event(ev); + return ev; now = odp_time_cycles(); diff = odp_time_diff_cycles(start, now); } while (odp_time_cycles_to_ns(diff) < ns); - return ODP_BUFFER_INVALID; + return ODP_EVENT_INVALID; } static odp_packet_t wait_for_packet(odp_queue_t queue, @@ -267,22 +267,20 @@ static odp_packet_t wait_for_packet(odp_queue_t queue, { uint64_t start, now, diff; odp_event_t ev; - odp_buffer_t buf; odp_packet_t pkt = ODP_PACKET_INVALID; start = odp_time_cycles(); do { if (queue != ODP_QUEUE_INVALID) { - buf = queue_deq_wait_time(queue, ns); + ev = queue_deq_wait_time(queue, ns); } else { ev = odp_schedule(NULL, ns); - buf = odp_buffer_from_event(ev); } - if (buf != ODP_BUFFER_INVALID && - odp_buffer_type(buf) == ODP_BUFFER_TYPE_PACKET) { - pkt = odp_packet_from_buffer(buf); + if (ev != ODP_EVENT_INVALID && + odp_event_type(ev) == ODP_EVENT_PACKET) { + pkt = odp_packet_from_event(ev); if (pktio_pkt_seq(pkt) == seq) return pkt; } diff --git a/test/validation/odp_timer.c b/test/validation/odp_timer.c index eca7e7f..adc1554 100644 --- a/test/validation/odp_timer.c +++ b/test/validation/odp_timer.c @@ -49,7 +49,7 @@ static void handle_tmo(odp_buffer_t buf, bool stale, uint64_t prev_tick) { /* Use assert() for internal correctness checks of test program */ assert(buf != ODP_BUFFER_INVALID); - if (odp_buffer_type(buf) != ODP_BUFFER_TYPE_TIMEOUT) { + if (odp_event_type(odp_buffer_to_event(buf)) != ODP_EVENT_TIMEOUT) { /* Not a timeout buffer */ CU_FAIL("Unexpected buffer type received"); return;
Removed odp_buffer_type() from API and made it internal. Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> --- platform/linux-generic/include/api/odp_buffer.h | 16 ---- .../linux-generic/include/api/odp_buffer_pool.h | 4 + .../linux-generic/include/odp_buffer_internal.h | 16 ++++ platform/linux-generic/odp_buffer.c | 2 +- platform/linux-generic/odp_buffer_pool.c | 4 +- platform/linux-generic/odp_event.c | 4 +- platform/linux-generic/odp_timer.c | 4 +- test/validation/buffer/odp_buffer_pool_test.c | 88 +++++++++++++--------- test/validation/buffer/odp_buffer_test.c | 4 +- test/validation/buffer/odp_packet_test.c | 15 ++-- test/validation/odp_pktio.c | 16 ++-- test/validation/odp_timer.c | 2 +- 12 files changed, 97 insertions(+), 78 deletions(-)