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.savolai...@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;



_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to