X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest%2Ftest_mempool.c;h=a451608558f8d20e13523e697eb6fea3e54ce5ba;hb=5b08ac4e4a8dbc95f52b871b62a97fda57fa477e;hp=25d61a2aa241416dbaf989afd97e6a73e18410d9;hpb=d7203661844c304b5e1e7acfcae3b66d4a79b87e;p=dpdk.git diff --git a/app/test/test_mempool.c b/app/test/test_mempool.c index 25d61a2aa2..a451608558 100644 --- a/app/test/test_mempool.c +++ b/app/test/test_mempool.c @@ -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)