There is no need for ioport access for applications that won't use virtio pmds.
Make rte_eal_iopl_init() non-static so that it is called from pmds that need it.
Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Huawei Xie <huawei.xie@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
}
/* Abstraction for port I/0 privilege */
-static int
+int
rte_eal_iopl_init(void)
{
int fd = -1;
rte_config_init();
- if (rte_eal_iopl_init() == 0)
- rte_config.flags |= EAL_FLG_HIGH_IOPL;
-
if (rte_eal_cpu_init() < 0)
rte_panic("Cannot detect lcores\n");
struct rte_mem_config *mem_config;
} __attribute__((__packed__));
-/* Flag definitions for rte_config flags */
-#define EAL_FLG_HIGH_IOPL 1 /**< indicates high IO privilege in a linux env */
-
/**
* Get the global configuration structure.
*
*/
enum rte_proc_type_t rte_eal_process_type(void);
+/**
+ * Request iopl privilege for all RPL.
+ *
+ * This function should be called by pmds which need access to ioports.
+
+ * @return
+ * - On success, returns 0.
+ * - On failure, returns -1.
+ */
+int rte_eal_iopl_init(void);
+
/**
* Initialize the Environment Abstraction Layer (EAL).
*
#define SOCKET_MEM_STRLEN (RTE_MAX_NUMA_NODES * 10)
-#define HIGHEST_RPL 3
-
/* Allow the application to print its usage message too if set */
static rte_usage_hook_t rte_application_usage_hook = NULL;
/*
* Request iopl privilege for all RPL, returns 0 on success
*/
-static int
+int
rte_eal_iopl_init(void)
{
- return iopl(HIGHEST_RPL);
+ if (iopl(3) != 0)
+ return -1;
+ return 0;
}
/* Launch threads, called at application init(). */
rte_config_init();
- if (rte_eal_iopl_init() == 0)
- rte_config.flags |= EAL_FLG_HIGH_IOPL;
-
if (rte_eal_pci_init() < 0)
rte_panic("Cannot init PCI\n");
return -1;
}
- if (!(rte_eal_get_configuration()->flags & EAL_FLG_HIGH_IOPL)) {
- PMD_INIT_LOG(ERR,
- "IOPL call failed in EAL init - cannot use virtio PMD driver\n");
- return -1;
- }
-
eth_dev->dev_ops = &virtio_eth_dev_ops;
eth_dev->tx_pkt_burst = &virtio_xmit_pkts;
* Returns 0 on success.
*/
static int
-rte_virtio_pmd_init(const char *name __rte_unused, const char *param __rte_unused)
+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;
}