With LIBRTE_PMD_XENVIRT enabled testpmd is built in a way to ONLY work
in XEN environments.
It will surface as:
   PMD: gntalloc: ioctl error
   EAL: Error - exiting with code: 1
     Cause: Creation of mbuf pool for socket 0 failed

With LIBRTE_PMD_XENVIRT enabled this now tries the xen style grant
table allocation, but falls back gracefully for the normal allocation.

The only thing left in the log will be the
   PMD: gntalloc: ioctl error
---
 app/test-pmd/testpmd.c | 33 ++++++++++++++++-----------------
 1 file changed, 16 insertions(+), 17 deletions(-)

diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 1319917..b008df3 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -410,7 +410,7 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
                 unsigned int socket_id)
 {
        char pool_name[RTE_MEMPOOL_NAMESIZE];
-       struct rte_mempool *rte_mp;
+       struct rte_mempool *rte_mp = NULL;
        uint32_t mb_size;

        mb_size = sizeof(struct rte_mbuf) + mbuf_seg_size;
@@ -423,24 +423,23 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
                rte_pktmbuf_pool_init, NULL,
                rte_pktmbuf_init, NULL,
                socket_id, 0);
-
-
-
-#else
-       if (mp_anon != 0)
-               rte_mp = mempool_anon_create(pool_name, nb_mbuf, mb_size,
-                                   (unsigned) mb_mempool_cache,
-                                   sizeof(struct rte_pktmbuf_pool_private),
-                                   rte_pktmbuf_pool_init, NULL,
-                                   rte_pktmbuf_init, NULL,
-                                   socket_id, 0);
-       else
-               /* wrapper to rte_mempool_create() */
-               rte_mp = rte_pktmbuf_pool_create(pool_name, nb_mbuf,
-                       mb_mempool_cache, 0, mbuf_seg_size, socket_id);
-
 #endif

+       /* if the former XEN allocation failed fall back to normal allocation */
+       if (rte_mp == NULL) {
+               if (mp_anon != 0)
+                       rte_mp = mempool_anon_create(pool_name, nb_mbuf,
+                                       mb_size, (unsigned) mb_mempool_cache,
+                                       sizeof(struct rte_pktmbuf_pool_private),
+                                       rte_pktmbuf_pool_init, NULL,
+                                       rte_pktmbuf_init, NULL,
+                                       socket_id, 0);
+               else
+                       /* wrapper to rte_mempool_create() */
+                       rte_mp = rte_pktmbuf_pool_create(pool_name, nb_mbuf,
+                               mb_mempool_cache, 0, mbuf_seg_size, socket_id);
+       }
+
        if (rte_mp == NULL) {
                rte_exit(EXIT_FAILURE, "Creation of mbuf pool for socket %u "
                                                "failed\n", socket_id);
-- 
2.7.0

Reply via email to