test/mempool: fix no-huge mode
[dpdk.git] / app / test / test_mempool.c
index 25d61a2..a451608 100644 (file)
@@ -207,15 +207,15 @@ static int test_mempool_creation_with_exceeded_cache_size(void)
        return 0;
 }
 
-static int test_mempool_creation_with_unknown_flag(void)
+static int test_mempool_creation_with_invalid_flags(void)
 {
        struct rte_mempool *mp_cov;
 
-       mp_cov = rte_mempool_create("test_mempool_unknown_flag", MEMPOOL_SIZE,
+       mp_cov = rte_mempool_create("test_mempool_invalid_flags", MEMPOOL_SIZE,
                MEMPOOL_ELT_SIZE, 0, 0,
                NULL, NULL,
                NULL, NULL,
-               SOCKET_ID_ANY, RTE_MEMPOOL_F_NO_IOVA_CONTIG << 1);
+               SOCKET_ID_ANY, ~RTE_MEMPOOL_VALID_USER_FLAGS);
 
        if (mp_cov != NULL) {
                rte_mempool_free(mp_cov);
@@ -515,17 +515,19 @@ test_mempool_events(int (*populate)(struct rte_mempool *mp))
 #undef RTE_TEST_TRACE_FAILURE
 #define RTE_TEST_TRACE_FAILURE(...) do { goto fail; } while (0)
 
-       static const size_t CB_NUM = 3;
-       static const size_t MP_NUM = 2;
+       static const size_t callback_num = 3;
+       static const size_t mempool_num = 2;
+       static const unsigned int mempool_elt_size = 64;
+       static const unsigned int mempool_size = 64;
 
-       struct test_mempool_events_data data[CB_NUM];
-       struct rte_mempool *mp[MP_NUM], *freed;
+       struct test_mempool_events_data data[callback_num];
+       struct rte_mempool *mp[mempool_num], *freed;
        char name[RTE_MEMPOOL_NAMESIZE];
        size_t i, j;
        int ret;
 
        memset(mp, 0, sizeof(mp));
-       for (i = 0; i < CB_NUM; i++) {
+       for (i = 0; i < callback_num; i++) {
                ret = rte_mempool_event_callback_register
                                (test_mempool_events_cb, &data[i]);
                RTE_TEST_ASSERT_EQUAL(ret, 0, "Failed to register the callback %zu: %s",
@@ -541,12 +543,12 @@ test_mempool_events(int (*populate)(struct rte_mempool *mp))
        /* Create mempool 0 that will be observed by all callbacks. */
        memset(&data, 0, sizeof(data));
        strcpy(name, "empty0");
-       mp[0] = rte_mempool_create_empty(name, MEMPOOL_SIZE,
-                                        MEMPOOL_ELT_SIZE, 0, 0,
+       mp[0] = rte_mempool_create_empty(name, mempool_size,
+                                        mempool_elt_size, 0, 0,
                                         SOCKET_ID_ANY, 0);
        RTE_TEST_ASSERT_NOT_NULL(mp[0], "Cannot create mempool %s: %s",
                                 name, rte_strerror(rte_errno));
-       for (j = 0; j < CB_NUM; j++)
+       for (j = 0; j < callback_num; j++)
                RTE_TEST_ASSERT_EQUAL(data[j].invoked, false,
                                      "Callback %zu invoked on %s mempool creation",
                                      j, name);
@@ -555,7 +557,7 @@ test_mempool_events(int (*populate)(struct rte_mempool *mp))
        ret = populate(mp[0]);
        RTE_TEST_ASSERT_EQUAL(ret, (int)mp[0]->size, "Failed to populate mempool %s: %s",
                              name, rte_strerror(-ret));
-       for (j = 0; j < CB_NUM; j++) {
+       for (j = 0; j < callback_num; j++) {
                RTE_TEST_ASSERT_EQUAL(data[j].invoked, true,
                                        "Callback %zu not invoked on mempool %s population",
                                        j, name);
@@ -574,8 +576,8 @@ test_mempool_events(int (*populate)(struct rte_mempool *mp))
                              rte_strerror(rte_errno));
        memset(&data, 0, sizeof(data));
        strcpy(name, "empty1");
-       mp[1] = rte_mempool_create_empty(name, MEMPOOL_SIZE,
-                                        MEMPOOL_ELT_SIZE, 0, 0,
+       mp[1] = rte_mempool_create_empty(name, mempool_size,
+                                        mempool_elt_size, 0, 0,
                                         SOCKET_ID_ANY, 0);
        RTE_TEST_ASSERT_NOT_NULL(mp[1], "Cannot create mempool %s: %s",
                                 name, rte_strerror(rte_errno));
@@ -587,7 +589,7 @@ test_mempool_events(int (*populate)(struct rte_mempool *mp))
                              "Unregistered callback 0 invoked on %s mempool populaton",
                              name);
 
-       for (i = 0; i < MP_NUM; i++) {
+       for (i = 0; i < mempool_num; i++) {
                memset(&data, 0, sizeof(data));
                sprintf(name, "empty%zu", i);
                rte_mempool_free(mp[i]);
@@ -597,7 +599,7 @@ test_mempool_events(int (*populate)(struct rte_mempool *mp))
                 */
                freed = mp[i];
                mp[i] = NULL;
-               for (j = 1; j < CB_NUM; j++) {
+               for (j = 1; j < callback_num; j++) {
                        RTE_TEST_ASSERT_EQUAL(data[j].invoked, true,
                                              "Callback %zu not invoked on mempool %s destruction",
                                              j, name);
@@ -613,7 +615,7 @@ test_mempool_events(int (*populate)(struct rte_mempool *mp))
                                      name);
        }
 
-       for (j = 1; j < CB_NUM; j++) {
+       for (j = 1; j < callback_num; j++) {
                ret = rte_mempool_event_callback_unregister
                                        (test_mempool_events_cb, &data[j]);
                RTE_TEST_ASSERT_EQUAL(ret, 0, "Failed to unregister the callback %zu: %s",
@@ -622,10 +624,10 @@ test_mempool_events(int (*populate)(struct rte_mempool *mp))
        return TEST_SUCCESS;
 
 fail:
-       for (j = 0; j < CB_NUM; j++)
+       for (j = 0; j < callback_num; j++)
                rte_mempool_event_callback_unregister
                                        (test_mempool_events_cb, &data[j]);
-       for (i = 0; i < MP_NUM; i++)
+       for (i = 0; i < mempool_num; i++)
                rte_mempool_free(mp[i]);
        return TEST_FAILED;
 
@@ -740,16 +742,32 @@ exit:
 static int
 test_mempool_flag_non_io_set_when_no_iova_contig_set(void)
 {
+       const struct rte_memzone *mz = NULL;
+       void *virt;
+       rte_iova_t iova;
+       size_t size = MEMPOOL_ELT_SIZE * 16;
        struct rte_mempool *mp = NULL;
        int ret;
 
+       mz = rte_memzone_reserve("test_mempool", size, SOCKET_ID_ANY, 0);
+       RTE_TEST_ASSERT_NOT_NULL(mz, "Cannot allocate memory");
+       virt = mz->addr;
+       iova = mz->iova;
        mp = rte_mempool_create_empty("empty", MEMPOOL_SIZE,
                                      MEMPOOL_ELT_SIZE, 0, 0,
                                      SOCKET_ID_ANY, RTE_MEMPOOL_F_NO_IOVA_CONTIG);
        RTE_TEST_ASSERT_NOT_NULL(mp, "Cannot create mempool: %s",
                                 rte_strerror(rte_errno));
        rte_mempool_set_ops_byname(mp, rte_mbuf_best_mempool_ops(), NULL);
-       ret = rte_mempool_populate_default(mp);
+
+       RTE_TEST_ASSERT(mp->flags & RTE_MEMPOOL_F_NON_IO,
+                       "NON_IO flag is not set on an empty mempool");
+
+       /*
+        * Always use valid IOVA so that populate() has no other reason
+        * to infer that the mempool cannot be used for IO.
+        */
+       ret = rte_mempool_populate_iova(mp, virt, iova, size, NULL, NULL);
        RTE_TEST_ASSERT(ret > 0, "Failed to populate mempool: %s",
                        rte_strerror(-ret));
        RTE_TEST_ASSERT(mp->flags & RTE_MEMPOOL_F_NON_IO,
@@ -757,13 +775,15 @@ test_mempool_flag_non_io_set_when_no_iova_contig_set(void)
        ret = TEST_SUCCESS;
 exit:
        rte_mempool_free(mp);
+       rte_memzone_free(mz);
        return ret;
 }
 
 static int
 test_mempool_flag_non_io_unset_when_populated_with_valid_iova(void)
 {
-       void *virt = NULL;
+       const struct rte_memzone *mz = NULL;
+       void *virt;
        rte_iova_t iova;
        size_t total_size = MEMPOOL_ELT_SIZE * MEMPOOL_SIZE;
        size_t block_size = total_size / 3;
@@ -773,18 +793,21 @@ test_mempool_flag_non_io_unset_when_populated_with_valid_iova(void)
        /*
         * Since objects from the pool are never used in the test,
         * we don't care for contiguous IOVA, on the other hand,
-        * reiuring it could cause spurious test failures.
+        * requiring it could cause spurious test failures.
         */
-       virt = rte_malloc("test_mempool", total_size, rte_mem_page_size());
-       RTE_TEST_ASSERT_NOT_NULL(virt, "Cannot allocate memory");
-       iova = rte_mem_virt2iova(virt);
-       RTE_TEST_ASSERT_NOT_EQUAL(iova,  RTE_BAD_IOVA, "Cannot get IOVA");
+       mz = rte_memzone_reserve("test_mempool", total_size, SOCKET_ID_ANY, 0);
+       RTE_TEST_ASSERT_NOT_NULL(mz, "Cannot allocate memory");
+       virt = mz->addr;
+       iova = mz->iova;
        mp = rte_mempool_create_empty("empty", MEMPOOL_SIZE,
                                      MEMPOOL_ELT_SIZE, 0, 0,
                                      SOCKET_ID_ANY, 0);
        RTE_TEST_ASSERT_NOT_NULL(mp, "Cannot create mempool: %s",
                                 rte_strerror(rte_errno));
 
+       RTE_TEST_ASSERT(mp->flags & RTE_MEMPOOL_F_NON_IO,
+                       "NON_IO flag is not set on an empty mempool");
+
        ret = rte_mempool_populate_iova(mp, RTE_PTR_ADD(virt, 1 * block_size),
                                        RTE_BAD_IOVA, block_size, NULL, NULL);
        RTE_TEST_ASSERT(ret > 0, "Failed to populate mempool: %s",
@@ -808,29 +831,7 @@ test_mempool_flag_non_io_unset_when_populated_with_valid_iova(void)
 
 exit:
        rte_mempool_free(mp);
-       rte_free(virt);
-       return ret;
-}
-
-static int
-test_mempool_flag_non_io_unset_by_default(void)
-{
-       struct rte_mempool *mp;
-       int ret;
-
-       mp = rte_mempool_create_empty("empty", MEMPOOL_SIZE,
-                                     MEMPOOL_ELT_SIZE, 0, 0,
-                                     SOCKET_ID_ANY, 0);
-       RTE_TEST_ASSERT_NOT_NULL(mp, "Cannot create mempool: %s",
-                                rte_strerror(rte_errno));
-       ret = rte_mempool_populate_default(mp);
-       RTE_TEST_ASSERT_EQUAL(ret, (int)mp->size, "Failed to populate mempool: %s",
-                             rte_strerror(-ret));
-       RTE_TEST_ASSERT(!(mp->flags & RTE_MEMPOOL_F_NON_IO),
-                       "NON_IO flag is set by default");
-       ret = TEST_SUCCESS;
-exit:
-       rte_mempool_free(mp);
+       rte_memzone_free(mz);
        return ret;
 }
 
@@ -1000,7 +1001,7 @@ test_mempool(void)
        if (test_mempool_creation_with_exceeded_cache_size() < 0)
                GOTO_ERR(ret, err);
 
-       if (test_mempool_creation_with_unknown_flag() < 0)
+       if (test_mempool_creation_with_invalid_flags() < 0)
                GOTO_ERR(ret, err);
 
        if (test_mempool_same_name_twice_creation() < 0)
@@ -1022,8 +1023,6 @@ test_mempool(void)
                GOTO_ERR(ret, err);
 
        /* test NON_IO flag inference */
-       if (test_mempool_flag_non_io_unset_by_default() < 0)
-               GOTO_ERR(ret, err);
        if (test_mempool_flag_non_io_set_when_no_iova_contig_set() < 0)
                GOTO_ERR(ret, err);
        if (test_mempool_flag_non_io_unset_when_populated_with_valid_iova() < 0)