[dpdk-dev] [PATCH 1/2] virtio: initialize iopl when device is initialized
Stephen Hemminger
stephen at networkplumber.org
Fri Mar 6 01:45:25 CET 2015
The virtio driver needs to use in/out instructions therefore it
must initialize using iopl(2) system call. The problem is that
virtio initialization happens very early, and any application
that uses daemon() or calls eal_init later in another context
will fail.
The fix is to move the iopl into rte_eal_init.
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
lib/librte_eal/linuxapp/eal/eal.c | 5 +++++
lib/librte_pmd_virtio/virtio_ethdev.c | 5 -----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 16f9e7c..76481f7 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -764,6 +764,11 @@ rte_eal_init(int argc, char **argv)
rte_panic("Cannot init IVSHMEM\n");
#endif
+#ifdef RTE_LIBRTE_VIRTIO_PMD
+ if (rte_eal_iopl_init() != 0)
+ rte_panic("IOPL call failed - cannot use virtio PMD");
+#endif
+
if (rte_eal_memory_init() < 0)
rte_panic("Cannot init memory\n");
diff --git a/lib/librte_pmd_virtio/virtio_ethdev.c b/lib/librte_pmd_virtio/virtio_ethdev.c
index d239083..e2600de 100644
--- a/lib/librte_pmd_virtio/virtio_ethdev.c
+++ b/lib/librte_pmd_virtio/virtio_ethdev.c
@@ -1247,11 +1247,6 @@ static int
rte_virtio_pmd_init(const char *name __rte_unused,
const char *param __rte_unused)
{
- if (rte_eal_iopl_init() != 0) {
- PMD_INIT_LOG(ERR, "IOPL call failed - cannot use virtio PMD");
- return -1;
- }
-
rte_eth_driver_register(&rte_virtio_pmd);
return 0;
}
--
2.1.4
More information about the dev
mailing list