78 lines
2.4 KiB
Diff
78 lines
2.4 KiB
Diff
Description: build: avoid testpmd only working in XEN
|
|
|
|
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
|
|
|
|
There could be a complex solution checking if this is a Xen env via
|
|
something like:
|
|
#include <xenstore.h>
|
|
struct xs_handle *xsh = NULL;
|
|
xsh = xs_open(XS_OPEN_READONLY);
|
|
check for xsh being NULL ...
|
|
|
|
But I see no reason to go so complex and instead the patch goes the
|
|
simple and more readable way of just falling back to the normal
|
|
allocation if the xen based allocation failed.
|
|
|
|
Forwarded: Yes - Accepted as bece7b6cf6849331c1817e1034c03fab251952a7
|
|
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
|
Last-Update: 2016-04-12
|
|
|
|
Index: dpdk/app/test-pmd/testpmd.c
|
|
===================================================================
|
|
--- dpdk.orig/app/test-pmd/testpmd.c
|
|
+++ dpdk/app/test-pmd/testpmd.c
|
|
@@ -410,7 +410,7 @@ mbuf_pool_create(uint16_t mbuf_seg_size,
|
|
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,
|
|
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);
|