Hi, Olivier

Great! Thanks a lot for the unit test template, this is very nice starting 
point,
I will think what would be good to add for more thorough testing.

With best regards, Slava
 
> One more thing: it would be nice to have a functional test for this new
> feature. I did a very minimal one to check the basic alloc/free/attach
> feature, you can restart from that if you want.
> 
> static int
> test_ext_pinned(int test_case)
> {
>       struct rte_pktmbuf_extmem ext_mem;
>       struct rte_mempool *pinned_pool = NULL;
>       struct rte_mempool *std_pool = NULL;
>       const struct rte_memzone *mz = NULL;
>       struct rte_mbuf *m = NULL, *m2 = NULL;
> 
>       printf("Test mbuf pool with mbufs data pinned to external buffer
> (%d)\n", test_case);
> 
>       std_pool = rte_pktmbuf_pool_create("std_pool",
>                       NB_MBUF, MEMPOOL_CACHE_SIZE, 0,
> MBUF_DATA_SIZE,
>                       SOCKET_ID_ANY);
>       if (std_pool == NULL)
>               GOTO_FAIL("std_pool alloc failed");
> 
>       mz = rte_memzone_reserve("std_pool",
>                               NB_MBUF * sizeof(struct rte_mbuf),
>                               SOCKET_ID_ANY,
> 
>       RTE_MEMZONE_2MB|RTE_MEMZONE_SIZE_HINT_ONLY);
>       if (mz == NULL)
>               GOTO_FAIL("memzone alloc failed");
> 
>       ext_mem.buf_ptr = mz->addr;
>       ext_mem.buf_iova = mz->iova;
>       ext_mem.buf_len = mz->len;
>       ext_mem.elt_size = sizeof(struct rte_mbuf);
> 
>       pinned_pool = rte_pktmbuf_pool_create_extbuf("pinned_pool",
>                                       NB_MBUF, MEMPOOL_CACHE_SIZE,
>                                       0, 0, SOCKET_ID_ANY, &ext_mem, 1);
>       if (pinned_pool == NULL)
>               GOTO_FAIL("pinned_pool alloc failed");
> 
>       m = rte_pktmbuf_alloc(pinned_pool);
>       if (unlikely(m == NULL))
>               goto fail;
> 
>       if (test_case != 0) {
>               m2 = rte_pktmbuf_alloc(std_pool);
>               if (unlikely(m == NULL))
>                       goto fail;
>               rte_pktmbuf_attach(m2, m);
>       }
> 
>       if (test_case == 0) {
>               rte_pktmbuf_free(m);
>       } else if (test_case == 1) {
>               rte_pktmbuf_free(m);
>               rte_pktmbuf_free(m2);
>       } else if (test_case == 2) {
>               rte_pktmbuf_free(m2);
>               rte_pktmbuf_free(m);
>       }
> 
> 
>       rte_mempool_free(pinned_pool);
>       rte_memzone_free(mz);
>       rte_mempool_free(std_pool);
>       return 0;
> 
> fail:
>       rte_pktmbuf_free(m2);
>       rte_pktmbuf_free(m);
>       rte_mempool_free(pinned_pool);
>       rte_memzone_free(mz);
>       rte_mempool_free(std_pool);
>       return -1;
> }

Reply via email to