There appear to be a lot of whitespace changes, I assume they are
checkpatch cleanups in a number of cases.
Can we move all the non functional whitespace changes to their own patch so
that the logic of the change is more apparent in a single patch.



On 19 January 2015 at 06:34, Yan Songming <yan.songm...@linaro.org> wrote:

> From: Yan Sonming <yan.songm...@linaro.org>
>
> Free all resource of odp which include share memory, queue and buffer pool.
> Fix the bug of odp_shm_free.
>
> Signed-off-by: Yan Songming <yan.songm...@linaro.org>
> ---
>  platform/linux-generic/include/odp_internal.h | 10 +++
>  platform/linux-generic/odp_buffer_pool.c      | 88
> +++++++++++++++++++--------
>  platform/linux-generic/odp_classification.c   | 42 ++++++++++---
>  platform/linux-generic/odp_crypto.c           | 12 ++++
>  platform/linux-generic/odp_init.c             | 43 ++++++++++++-
>  platform/linux-generic/odp_packet_io.c        | 35 ++++++++---
>  platform/linux-generic/odp_queue.c            | 24 ++++++++
>  platform/linux-generic/odp_schedule.c         | 34 +++++++++--
>  platform/linux-generic/odp_shared_memory.c    | 12 +++-
>  platform/linux-generic/odp_thread.c           | 13 ++++
>  10 files changed, 263 insertions(+), 50 deletions(-)
>
> diff --git a/platform/linux-generic/include/odp_internal.h
> b/platform/linux-generic/include/odp_internal.h
> index 549d406..d46f5ef 100644
> --- a/platform/linux-generic/include/odp_internal.h
> +++ b/platform/linux-generic/include/odp_internal.h
> @@ -24,23 +24,33 @@ int odp_system_info_init(void);
>  int odp_thread_init_global(void);
>  int odp_thread_init_local(void);
>  int odp_thread_term_local(void);
> +int odp_thread_term_global(void);
>
>  int odp_shm_init_global(void);
> +int odp_shm_term_global(void);
>  int odp_shm_init_local(void);
>
>  int odp_buffer_pool_init_global(void);
> +int odp_buffer_pool_term_global(void);
> +int odp_buffer_pool_term_local(void);
>
>  int odp_pktio_init_global(void);
> +int odp_pktio_term_global(void);
>  int odp_pktio_init_local(void);
>
>  int odp_classification_init_global(void);
> +int odp_classification_term_global(void);
>
>  int odp_queue_init_global(void);
> +int odp_queue_term_global(void);
>
>  int odp_crypto_init_global(void);
> +int odp_crypto_term_global(void);
>
>  int odp_schedule_init_global(void);
> +int odp_schedule_term_global(void);
>  int odp_schedule_init_local(void);
> +int odp_schedule_term_local(void);
>
>  int odp_timer_init_global(void);
>  int odp_timer_disarm_all(void);
> diff --git a/platform/linux-generic/odp_buffer_pool.c
> b/platform/linux-generic/odp_buffer_pool.c
> index eedb380..85e99e2 100644
> --- a/platform/linux-generic/odp_buffer_pool.c
> +++ b/platform/linux-generic/odp_buffer_pool.c
> @@ -55,6 +55,7 @@ typedef struct pool_table_t {
>
>  /* The pool table */
>  static pool_table_t *pool_tbl;
> +static const char shm_name[] = "odp_buffer_pools";
>
>  /* Pool entry pointers (for inlining) */
>  void *pool_entry_ptr[ODP_CONFIG_BUFFER_POOLS];
> @@ -67,7 +68,7 @@ int odp_buffer_pool_init_global(void)
>         uint32_t i;
>         odp_shm_t shm;
>
> -       shm = odp_shm_reserve("odp_buffer_pools",
> +       shm = odp_shm_reserve(shm_name,
>                               sizeof(pool_table_t),
>                               sizeof(pool_entry_t), 0);
>
> @@ -95,13 +96,48 @@ int odp_buffer_pool_init_global(void)
>         return 0;
>  }
>
> +int odp_buffer_pool_term_global(void)
> +{
> +       odp_shm_t shm;
> +       int i;
> +       pool_entry_t *pool;
> +       int ret = 0;
> +
> +       for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
> +               pool = get_pool_entry(i);
> +
> +               POOL_LOCK(&pool->s.lock);
> +               if (pool->s.pool_shm != ODP_SHM_INVALID) {
> +                       ODP_ERR("Not destroyed pool: %s\n", pool->s.name);
> +                       ret = -1;
> +               }
> +               POOL_UNLOCK(&pool->s.lock);
> +       }
> +       if (ret)
> +               return ret;
> +
> +       shm = odp_shm_lookup(shm_name);
> +       if (shm == ODP_SHM_INVALID)
> +               return -1;
> +       ret = odp_shm_free(shm);
> +
> +       return ret;
> +}
> +
> +int odp_buffer_pool_term_local(void)
> +{
> +       _odp_flush_caches();
> +       return 0;
> +}
> +
> +
>  /**
>   * Buffer pool creation
>   */
>
>  odp_buffer_pool_t odp_buffer_pool_create(const char *name,
> -                                        odp_shm_t shm,
> -                                        odp_buffer_pool_param_t *params)
> +               odp_shm_t shm,
> +               odp_buffer_pool_param_t *params)
>  {
>         odp_buffer_pool_t pool_hdl = ODP_BUFFER_POOL_INVALID;
>         pool_entry_t *pool;
> @@ -127,8 +163,8 @@ odp_buffer_pool_t odp_buffer_pool_create(const char
> *name,
>
>         /* Restriction for v1.0: No udata support */
>         uint32_t udata_stride = (init_params->udata_size > sizeof(void *))
> ?
> -               ODP_CACHE_LINE_SIZE_ROUNDUP(init_params->udata_size) :
> -               0;
> +
>  ODP_CACHE_LINE_SIZE_ROUNDUP(init_params->udata_size) :
> +                       0;
>
>         uint32_t blk_size, buf_stride;
>         uint32_t buf_align = params->buf_align;
> @@ -155,8 +191,8 @@ odp_buffer_pool_t odp_buffer_pool_create(const char
> *name,
>                         blk_size = ODP_ALIGN_ROUNDUP(blk_size, buf_align);
>
>                 buf_stride = params->buf_type == ODP_BUFFER_TYPE_RAW ?
> -                       sizeof(odp_buffer_hdr_stride) :
> -                       sizeof(odp_timeout_hdr_stride);
> +                            sizeof(odp_buffer_hdr_stride) :
> +                            sizeof(odp_timeout_hdr_stride);
>                 break;
>
>         case ODP_BUFFER_TYPE_PACKET:
> @@ -167,16 +203,16 @@ odp_buffer_pool_t odp_buffer_pool_create(const char
> *name,
>
>                 if (unsegmented)
>                         blk_size = ODP_ALIGN_ROUNDUP(
> -                               headroom + params->buf_size + tailroom,
> -                               buf_align);
> +                                  headroom + params->buf_size + tailroom,
> +                                          buf_align);
>                 else
>                         blk_size = ODP_ALIGN_ROUNDUP(
> -                               headroom + params->buf_size + tailroom,
> -                               ODP_CONFIG_PACKET_BUF_LEN_MIN);
> +                                  headroom + params->buf_size + tailroom,
> +                                          ODP_CONFIG_PACKET_BUF_LEN_MIN);
>
>                 buf_stride = params->buf_type == ODP_BUFFER_TYPE_PACKET ?
> -                       sizeof(odp_packet_hdr_stride) :
> -                       sizeof(odp_any_hdr_stride);
> +                            sizeof(odp_packet_hdr_stride) :
> +                            sizeof(odp_any_hdr_stride);
>                 break;
>
>         default:
> @@ -230,9 +266,9 @@ odp_buffer_pool_t odp_buffer_pool_create(const char
> *name,
>                 udata_size = params->num_bufs * udata_stride;
>
>                 pool->s.pool_size = ODP_PAGE_SIZE_ROUNDUP(block_size +
> -                                                         pad_size +
> -                                                         mdata_size +
> -                                                         udata_size);
> +                                   pad_size +
> +                                   mdata_size +
> +                                   udata_size);
>
>                 if (shm == ODP_SHM_NULL) {
>                         shm = odp_shm_reserve(pool->s.name,
> @@ -274,7 +310,7 @@ odp_buffer_pool_t odp_buffer_pool_create(const char
> *name,
>                 pool->s.flags.unsegmented = unsegmented;
>                 pool->s.flags.zeroized = zeroized;
>                 pool->s.seg_size = unsegmented ?
> -                       blk_size : ODP_CONFIG_PACKET_BUF_LEN_MIN;
> +                                  blk_size :
> ODP_CONFIG_PACKET_BUF_LEN_MIN;
>
>
>                 uint8_t *block_base_addr = pool->s.pool_base_addr;
> @@ -297,7 +333,7 @@ odp_buffer_pool_t odp_buffer_pool_create(const char
> *name,
>
>                 uint8_t *buf = udata_base_addr - buf_stride;
>                 uint8_t *udat = udata_stride == 0 ? NULL :
> -                       block_base_addr - udata_stride;
> +                               block_base_addr - udata_stride;
>
>                 /* Init buffer common header and add to pool buffer
> freelist */
>                 do {
> @@ -407,7 +443,7 @@ int odp_buffer_pool_info(odp_buffer_pool_t pool_hdl,
>
>         info->name = pool->s.name;
>         info->shm  = pool->s.flags.user_supplied_shm ?
> -               pool->s.pool_shm : ODP_SHM_INVALID;
> +                    pool->s.pool_shm : ODP_SHM_INVALID;
>         info->params.buf_size  = pool->s.params.buf_size;
>         info->params.buf_align = pool->s.params.buf_align;
>         info->params.num_bufs  = pool->s.params.num_bufs;
> @@ -466,7 +502,7 @@ odp_buffer_t buffer_alloc(odp_buffer_pool_t pool_hdl,
> size_t size)
>
>         /* Try to satisfy request from the local cache */
>         buf = (odp_anybuf_t *)(void *)get_local_buf(&local_cache[pool_id],
> -                                                   &pool->s, totsize);
> +                       &pool->s, totsize);
>
>         /* If cache is empty, satisfy request from the pool */
>         if (odp_unlikely(buf == NULL)) {
> @@ -499,8 +535,8 @@ odp_buffer_t buffer_alloc(odp_buffer_pool_t pool_hdl,
> size_t size)
>
>                 if (pool->s.init_params.buf_init != NULL)
>                         (*pool->s.init_params.buf_init)
> -                               (buf->buf.handle.handle,
> -                                pool->s.init_params.buf_init_arg);
> +                       (buf->buf.handle.handle,
> +                        pool->s.init_params.buf_init_arg);
>         }
>
>         return odp_hdr_to_buf(&buf->buf);
> @@ -559,10 +595,10 @@ void odp_buffer_pool_print(odp_buffer_pool_t
> pool_hdl)
>                 pool->s.flags.has_name ? pool->s.name : "Unnamed Pool");
>         ODP_DBG(" pool type       %s\n",
>                 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" :
> -               "unknown"))));
> +               (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" :
> +                  "unknown"))));
>         ODP_DBG(" pool storage    %sODP managed\n",
>                 pool->s.flags.user_supplied_shm ?
>                 "application provided, " : "");
> diff --git a/platform/linux-generic/odp_classification.c
> b/platform/linux-generic/odp_classification.c
> index eeb049a..21728ac 100644
> --- a/platform/linux-generic/odp_classification.c
> +++ b/platform/linux-generic/odp_classification.c
> @@ -53,8 +53,8 @@ int odp_classification_init_global(void)
>         int i;
>
>         cos_shm = odp_shm_reserve("shm_odp_cos_tbl",
> -                       sizeof(cos_tbl_t),
> -                       sizeof(cos_t), 0);
> +                                 sizeof(cos_tbl_t),
> +                                 sizeof(cos_t), 0);
>
>         if (cos_shm == ODP_SHM_INVALID) {
>                 ODP_ERR("shm allocation failed for shm_odp_cos_tbl");
> @@ -73,8 +73,8 @@ int odp_classification_init_global(void)
>         }
>
>         pmr_shm = odp_shm_reserve("shm_odp_pmr_tbl",
> -                       sizeof(pmr_tbl_t),
> -                       sizeof(pmr_t), 0);
> +                                 sizeof(pmr_tbl_t),
> +                                 sizeof(pmr_t), 0);
>
>         if (pmr_shm == ODP_SHM_INVALID) {
>                 ODP_ERR("shm allocation failed for shm_odp_pmr_tbl");
> @@ -93,8 +93,8 @@ int odp_classification_init_global(void)
>         }
>
>         pmr_set_shm = odp_shm_reserve("shm_odp_pmr_set_tbl",
> -                       sizeof(pmr_set_tbl_t),
> -                       sizeof(pmr_set_t), 0);
> +                                     sizeof(pmr_set_tbl_t),
> +                                     sizeof(pmr_set_t), 0);
>
>         if (pmr_set_shm == ODP_SHM_INVALID) {
>                 ODP_ERR("shm allocation failed for shm_odp_pmr_set_tbl");
> @@ -124,6 +124,32 @@ error:
>         return -1;
>  }
>
> +int odp_classification_term_global(void)
> +{
> +       odp_shm_t cos_shm;
> +       odp_shm_t pmr_shm;
> +       odp_shm_t pmr_set_shm;
> +
> +       int ret = 0;
> +
> +       cos_shm = odp_shm_lookup("shm_odp_cos_tbl");
> +       if (cos_shm == ODP_SHM_INVALID)
> +               return -1;
> +       ret = odp_shm_free(cos_shm);
> +
> +       pmr_shm = odp_shm_lookup("shm_odp_pmr_tbl");
> +       if (pmr_shm == ODP_SHM_INVALID)
> +               return -1;
> +       ret = odp_shm_free(pmr_shm);
> +
> +       pmr_set_shm = odp_shm_lookup("shm_odp_pmr_set_tbl");
> +       if (pmr_set_shm == ODP_SHM_INVALID)
> +               return -1;
> +       ret = odp_shm_free(pmr_set_shm);
> +
> +       return ret;
> +}
> +
>  odp_cos_t odp_cos_create(const char *name)
>  {
>         int i;
> @@ -604,7 +630,7 @@ int odp_pmr_match_set_destroy(odp_pmr_set_t pmr_set_id)
>  }
>
>  int odp_pktio_pmr_match_set_cos(odp_pmr_set_t pmr_set_id, odp_pktio_t
> src_pktio,
> -               odp_cos_t dst_cos)
> +                               odp_cos_t dst_cos)
>  {
>         uint8_t num_pmr;
>         pktio_entry_t *pktio_entry;
> @@ -829,7 +855,7 @@ int packet_classifier(odp_pktio_t pktio, odp_packet_t
> pkt)
>  }
>
>  cos_t *pktio_select_cos(pktio_entry_t *entry, uint8_t *pkt_addr,
> -                      odp_packet_hdr_t *pkt_hdr)
> +                       odp_packet_hdr_t *pkt_hdr)
>  {
>         pmr_t *pmr;
>         cos_t *cos;
> diff --git a/platform/linux-generic/odp_crypto.c
> b/platform/linux-generic/odp_crypto.c
> index 2f95cbe..bf36b35 100644
> --- a/platform/linux-generic/odp_crypto.c
> +++ b/platform/linux-generic/odp_crypto.c
> @@ -421,6 +421,18 @@ odp_crypto_init_global(void)
>
>         return 0;
>  }
> +int odp_crypto_term_global(void)
> +{
> +       odp_shm_t shm;
> +       int ret = 0;
> +
> +       shm = odp_shm_lookup("crypto_pool");
> +       if (shm == ODP_SHM_INVALID)
> +               return -1;
> +       ret = odp_shm_free(shm);
> +
> +       return ret;
> +}
>
>  int
>  odp_hw_random_get(uint8_t *buf, size_t *len, bool use_entropy ODP_UNUSED)
> diff --git a/platform/linux-generic/odp_init.c
> b/platform/linux-generic/odp_init.c
> index 4d0aa07..6b22023 100644
> --- a/platform/linux-generic/odp_init.c
> +++ b/platform/linux-generic/odp_init.c
> @@ -11,7 +11,7 @@
>
>
>  int odp_init_global(odp_init_t *params  ODP_UNUSED,
> -                       odp_platform_init_t *platform_params ODP_UNUSED)
> +                   odp_platform_init_t *platform_params ODP_UNUSED)
>  {
>         odp_system_info_init();
>
> @@ -64,7 +64,46 @@ int odp_init_global(odp_init_t *params  ODP_UNUSED,
>
>  int odp_term_global(void)
>  {
> -       ODP_UNIMPLEMENTED();
> +       if (odp_classification_term_global()) {
> +               ODP_ERR("ODP classificatio term failed.\n");
> +               return -1;
> +       }
> +
> +       if (odp_crypto_term_global()) {
> +               ODP_ERR("ODP crypto term failed.\n");
> +               return -1;
> +       }
> +
> +       if (odp_pktio_term_global()) {
> +               ODP_ERR("ODP pktio term failed.\n");
> +               return -1;
> +       }
> +
> +       if (odp_schedule_term_global()) {
> +               ODP_ERR("ODP schedule term failed.\n");
> +               return -1;
> +       }
> +
> +       if (odp_queue_term_global()) {
> +               ODP_ERR("ODP queue term failed.\n");
> +               return -1;
> +       }
> +
> +       if (odp_buffer_pool_term_global()) {
> +               ODP_ERR("ODP buffer pool term failed.\n");
> +               return -1;
> +       }
> +
> +       if (odp_thread_term_global()) {
> +               ODP_ERR("ODP thread term failed.\n");
> +               return -1;
> +       }
> +
> +       if (odp_shm_term_global()) {
> +               ODP_ERR("ODP shm term failed.\n");
> +               return -1;
> +       }
> +
>         return 0;
>  }
>
> diff --git a/platform/linux-generic/odp_packet_io.c
> b/platform/linux-generic/odp_packet_io.c
> index cd109d2..a815020 100644
> --- a/platform/linux-generic/odp_packet_io.c
> +++ b/platform/linux-generic/odp_packet_io.c
> @@ -73,6 +73,25 @@ int odp_pktio_init_global(void)
>
>         return 0;
>  }
> +int odp_pktio_term_global(void)
> +{
> +       odp_shm_t shm;
> +       pktio_entry_t *pktio_entry;
> +       int ret = 0;
> +       int id;
> +
> +       for (id = 1; id <= ODP_CONFIG_PKTIO_ENTRIES; ++id) {
> +               pktio_entry = &pktio_tbl->entries[id - 1];
> +               odp_queue_destroy(pktio_entry->s.outq_default);
> +       }
> +
> +       shm = odp_shm_lookup("odp_pktio_entries");
> +       if (shm == ODP_SHM_INVALID)
> +               return -1;
> +       ret = odp_shm_free(shm);
> +
> +       return ret;
> +}
>
>  int odp_pktio_init_local(void)
>  {
> @@ -345,15 +364,15 @@ int odp_pktio_recv(odp_pktio_t id, odp_packet_t
> pkt_table[], unsigned len)
>         switch (pktio_entry->s.type) {
>         case ODP_PKTIO_TYPE_SOCKET_BASIC:
>                 pkts = recv_pkt_sock_basic(&pktio_entry->s.pkt_sock,
> -                               pkt_table, len);
> +                                          pkt_table, len);
>                 break;
>         case ODP_PKTIO_TYPE_SOCKET_MMSG:
>                 pkts = recv_pkt_sock_mmsg(&pktio_entry->s.pkt_sock,
> -                               pkt_table, len);
> +                                         pkt_table, len);
>                 break;
>         case ODP_PKTIO_TYPE_SOCKET_MMAP:
>                 pkts = recv_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap,
> -                               pkt_table, len);
> +                                         pkt_table, len);
>                 break;
>         default:
>                 pkts = -1;
> @@ -382,15 +401,15 @@ int odp_pktio_send(odp_pktio_t id, odp_packet_t
> pkt_table[], unsigned len)
>         switch (pktio_entry->s.type) {
>         case ODP_PKTIO_TYPE_SOCKET_BASIC:
>                 pkts = send_pkt_sock_basic(&pktio_entry->s.pkt_sock,
> -                               pkt_table, len);
> +                                          pkt_table, len);
>                 break;
>         case ODP_PKTIO_TYPE_SOCKET_MMSG:
>                 pkts = send_pkt_sock_mmsg(&pktio_entry->s.pkt_sock,
> -                               pkt_table, len);
> +                                         pkt_table, len);
>                 break;
>         case ODP_PKTIO_TYPE_SOCKET_MMAP:
>                 pkts = send_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap,
> -                               pkt_table, len);
> +                                         pkt_table, len);
>                 break;
>         default:
>                 pkts = -1;
> @@ -548,7 +567,7 @@ int pktin_deq_multi(queue_entry_t *qentry,
> odp_buffer_hdr_t *buf_hdr[], int num)
>         nbr = queue_deq_multi(qentry, buf_hdr, num);
>         if (odp_unlikely(nbr > num))
>                 ODP_ABORT("queue_deq_multi req: %d, returned %d\n",
> -                       num, nbr);
> +                         num, nbr);
>
>         /** queue already has number of requsted buffers,
>          *  do not do receive in that case.
> @@ -707,7 +726,7 @@ int odp_pktio_promisc_mode(odp_pktio_t id)
>  }
>
>  size_t odp_pktio_mac_addr(odp_pktio_t id, void *mac_addr,
> -                      size_t addr_size)
> +                         size_t addr_size)
>  {
>         pktio_entry_t *entry;
>
> diff --git a/platform/linux-generic/odp_queue.c
> b/platform/linux-generic/odp_queue.c
> index 70c006d..97d11bd 100644
> --- a/platform/linux-generic/odp_queue.c
> +++ b/platform/linux-generic/odp_queue.c
> @@ -127,6 +127,30 @@ int odp_queue_init_global(void)
>
>         return 0;
>  }
> +int odp_queue_term_global(void)
> +{
> +       odp_shm_t shm;
> +       int ret = 0;
> +       queue_entry_t *queue;
> +       int i;
> +
> +       for (i = 0; i < ODP_CONFIG_QUEUES; i++) {
> +               queue = &queue_tbl->queue[i];
> +               LOCK(&queue->s.lock);
> +               if (queue->s.status != QUEUE_STATUS_FREE) {
> +                       ODP_ERR("Not destroyed queue: %s\n", queue->s.name
> );
> +                       ret = -1;
> +               }
> +               UNLOCK(&queue->s.lock);
> +       }
> +
> +       shm = odp_shm_lookup("odp_queues");
> +       if (shm == ODP_SHM_INVALID)
> +               return -1;
> +       ret = odp_shm_free(shm);
> +
> +       return ret;
> +}
>
>  odp_queue_type_t odp_queue_type(odp_queue_t handle)
>  {
> diff --git a/platform/linux-generic/odp_schedule.c
> b/platform/linux-generic/odp_schedule.c
> index f7c3588..080edeb 100644
> --- a/platform/linux-generic/odp_schedule.c
> +++ b/platform/linux-generic/odp_schedule.c
> @@ -20,7 +20,8 @@
>  #include <odp_hints.h>
>
>  #include <odp_queue_internal.h>
> -
> +#include <string.h>
> +#include <stdio.h>
>
>  /* Limits to number of scheduled queues */
>  #define SCHED_POOL_SIZE (256*1024)
> @@ -144,6 +145,27 @@ int odp_schedule_init_global(void)
>         return 0;
>  }
>
> +int odp_schedule_term_global(void)
> +{
> +       odp_shm_t shm;
> +       int ret = 0;
> +       int i, j;
> +
> +       for (i = 0; i < ODP_CONFIG_SCHED_PRIOS; i++) {
> +               for (j = 0; j < QUEUES_PER_PRIO; j++)
> +                       odp_queue_destroy(sched->pri_queue[i][j]);
> +       }
> +
> +       if (odp_buffer_pool_destroy(sched->pool) != 0)
> +               return -1;
> +
> +       shm = odp_shm_lookup("odp_scheduler");
> +       if (shm == ODP_SHM_INVALID)
> +               return -1;
> +       ret = odp_shm_free(shm);
> +
> +       return ret;
> +}
>
>  int odp_schedule_init_local(void)
>  {
> @@ -162,7 +184,11 @@ int odp_schedule_init_local(void)
>
>         return 0;
>  }
> -
> +int odp_schedule_term_local(void)
> +{
> +       memset(&sched_local, 0, sizeof(sched_local_t));
> +       return 0;
> +}
>
>  void odp_schedule_mask_set(odp_queue_t queue, int prio)
>  {
> @@ -331,8 +357,8 @@ static int schedule(odp_queue_t *out_queue,
> odp_buffer_t out_buf[],
>
>
>  static int schedule_loop(odp_queue_t *out_queue, uint64_t wait,
> -                         odp_buffer_t out_buf[],
> -                         unsigned int max_num, unsigned int max_deq)
> +                        odp_buffer_t out_buf[],
> +                        unsigned int max_num, unsigned int max_deq)
>  {
>         uint64_t start_cycle, cycle, diff;
>         int ret;
> diff --git a/platform/linux-generic/odp_shared_memory.c
> b/platform/linux-generic/odp_shared_memory.c
> index 99c5b40..7f1f6a8 100644
> --- a/platform/linux-generic/odp_shared_memory.c
> +++ b/platform/linux-generic/odp_shared_memory.c
> @@ -94,6 +94,14 @@ int odp_shm_init_global(void)
>         return 0;
>  }
>
> +int odp_shm_term_global(void)
> +{
> +       int ret = 0;
> +
> +       ret = munmap(odp_shm_tbl, sizeof(odp_shm_table_t));
> +       return ret;
> +}
> +
>
>  int odp_shm_init_local(void)
>  {
> @@ -135,9 +143,9 @@ int odp_shm_free(odp_shm_t shm)
>         shm_block = &odp_shm_tbl->block[i];
>
>         alloc_size = shm_block->size + shm_block->align;
> -       ret = munmap(shm_block->addr, alloc_size);
> +       ret = munmap(shm_block->addr_orig, alloc_size);
>         if (0 != ret) {
> -               ODP_DBG("odp_shm_free: munmap failed\n");
> +               ODP_DBG("odp_shm_free: munmap failed : %s\n",
> shm_block->name);
>                 odp_spinlock_unlock(&odp_shm_tbl->lock);
>                 return -1;
>         }
> diff --git a/platform/linux-generic/odp_thread.c
> b/platform/linux-generic/odp_thread.c
> index ccbd068..933e920 100644
> --- a/platform/linux-generic/odp_thread.c
> +++ b/platform/linux-generic/odp_thread.c
> @@ -64,6 +64,19 @@ int odp_thread_init_global(void)
>         return 0;
>  }
>
> +int odp_thread_term_global(void)
> +{
> +       odp_shm_t shm;
> +       int ret = 0;
> +
> +       shm = odp_shm_lookup("odp_thread_globals");
> +       if (shm == ODP_SHM_INVALID)
> +               return -1;
> +       ret = odp_shm_free(shm);
> +
> +       return ret;
> +}
> +
>
>  static int thread_id(void)
>  {
> --
> 1.8.3.1
>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/lng-odp
>



-- 
*Mike Holmes*
Linaro  Sr Technical Manager
LNG - ODP
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to