eal: add assert macro for debug
[dpdk.git] / lib / librte_mempool / rte_mempool.c
index e57cbbd..70812d9 100644 (file)
@@ -375,6 +375,26 @@ rte_mempool_xmem_usage(void *vaddr, uint32_t elt_num, size_t elt_sz,
        return usz;
 }
 
+#ifndef RTE_LIBRTE_XEN_DOM0
+/* stub if DOM0 support not configured */
+struct rte_mempool *
+rte_dom0_mempool_create(const char *name __rte_unused,
+                       unsigned n __rte_unused,
+                       unsigned elt_size __rte_unused,
+                       unsigned cache_size __rte_unused,
+                       unsigned private_data_size __rte_unused,
+                       rte_mempool_ctor_t *mp_init __rte_unused,
+                       void *mp_init_arg __rte_unused,
+                       rte_mempool_obj_ctor_t *obj_init __rte_unused,
+                       void *obj_init_arg __rte_unused,
+                       int socket_id __rte_unused,
+                       unsigned flags __rte_unused)
+{
+       rte_errno = EINVAL;
+       return NULL;
+}
+#endif
+
 /* create the mempool */
 struct rte_mempool *
 rte_mempool_create(const char *name, unsigned n, unsigned elt_size,
@@ -383,20 +403,20 @@ rte_mempool_create(const char *name, unsigned n, unsigned elt_size,
                   rte_mempool_obj_ctor_t *obj_init, void *obj_init_arg,
                   int socket_id, unsigned flags)
 {
-#ifdef RTE_LIBRTE_XEN_DOM0
-       return rte_dom0_mempool_create(name, n, elt_size,
-               cache_size, private_data_size,
-               mp_init, mp_init_arg,
-               obj_init, obj_init_arg,
-               socket_id, flags);
-#else
-       return rte_mempool_xmem_create(name, n, elt_size,
-               cache_size, private_data_size,
-               mp_init, mp_init_arg,
-               obj_init, obj_init_arg,
-               socket_id, flags,
-               NULL, NULL, MEMPOOL_PG_NUM_DEFAULT, MEMPOOL_PG_SHIFT_MAX);
-#endif
+       if (rte_xen_dom0_supported())
+               return rte_dom0_mempool_create(name, n, elt_size,
+                                              cache_size, private_data_size,
+                                              mp_init, mp_init_arg,
+                                              obj_init, obj_init_arg,
+                                              socket_id, flags);
+       else
+               return rte_mempool_xmem_create(name, n, elt_size,
+                                              cache_size, private_data_size,
+                                              mp_init, mp_init_arg,
+                                              obj_init, obj_init_arg,
+                                              socket_id, flags,
+                                              NULL, NULL, MEMPOOL_PG_NUM_DEFAULT,
+                                              MEMPOOL_PG_SHIFT_MAX);
 }
 
 /*
@@ -418,8 +438,8 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
        char rg_name[RTE_RING_NAMESIZE];
        struct rte_mempool_list *mempool_list;
        struct rte_mempool *mp = NULL;
-       struct rte_tailq_entry *te;
-       struct rte_ring *r;
+       struct rte_tailq_entry *te = NULL;
+       struct rte_ring *r = NULL;
        const struct rte_memzone *mz;
        size_t mempool_size;
        int mz_flags = RTE_MEMZONE_1GB|RTE_MEMZONE_SIZE_HINT_ONLY;
@@ -491,7 +511,7 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
        snprintf(rg_name, sizeof(rg_name), RTE_MEMPOOL_MZ_FORMAT, name);
        r = rte_ring_create(rg_name, rte_align32pow2(n+1), socket_id, rg_flags);
        if (r == NULL)
-               goto exit;
+               goto exit_unlock;
 
        /*
         * reserve a memory zone for this mempool: private data is
@@ -516,7 +536,7 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
        te = rte_zmalloc("MEMPOOL_TAILQ_ENTRY", sizeof(*te), 0);
        if (te == NULL) {
                RTE_LOG(ERR, MEMPOOL, "Cannot allocate tailq entry!\n");
-               goto exit;
+               goto exit_unlock;
        }
 
        /*
@@ -541,15 +561,8 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
        snprintf(mz_name, sizeof(mz_name), RTE_MEMPOOL_MZ_FORMAT, name);
 
        mz = rte_memzone_reserve(mz_name, mempool_size, socket_id, mz_flags);
-
-       /*
-        * no more memory: in this case we loose previously reserved
-        * space for the ring as we cannot free it
-        */
-       if (mz == NULL) {
-               rte_free(te);
-               goto exit;
-       }
+       if (mz == NULL)
+               goto exit_unlock;
 
        if (rte_eal_has_hugepages()) {
                startaddr = (void*)mz->addr;
@@ -613,11 +626,16 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
        rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);
        TAILQ_INSERT_TAIL(mempool_list, te, next);
        rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
-
-exit:
        rte_rwlock_write_unlock(RTE_EAL_MEMPOOL_RWLOCK);
 
        return mp;
+
+exit_unlock:
+       rte_rwlock_write_unlock(RTE_EAL_MEMPOOL_RWLOCK);
+       rte_ring_free(r);
+       rte_free(te);
+
+       return NULL;
 }
 
 /* Return the number of entries in the mempool */
@@ -777,8 +795,8 @@ rte_mempool_dump(FILE *f, const struct rte_mempool *mp)
        unsigned common_count;
        unsigned cache_count;
 
-       RTE_VERIFY(f != NULL);
-       RTE_VERIFY(mp != NULL);
+       RTE_ASSERT(f != NULL);
+       RTE_ASSERT(mp != NULL);
 
        fprintf(f, "mempool <%s>@%p\n", mp->name, mp);
        fprintf(f, "  flags=%x\n", mp->flags);