[dpdk-dev] [PATCH] BugFix: VFIO never works

Tetsuya Mukawa mukawa at igel.co.jp
Fri Jul 10 10:34:54 CEST 2015


On 2015/07/10 16:47, Michael Qiu wrote:
> Commit 35b3313e322b ("pci: merge mapping functions for linux and bsd")
>
> introduced a bug that all vfio will be
> blocked.
>
> Root cause is that VFIO_PRESENT is unaccessable in eal
> common level.
>
> This patch is to fix this.
>
> Signed-off-by: Michael Qiu <michael.qiu at intel.com>
> ---
>  lib/librte_eal/common/eal_common_pci.c     |  2 --
>  lib/librte_eal/common/eal_private.h        |  3 +++
>  lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 10 ++++++++++
>  3 files changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c
> index 3805aed..f3dc697 100644
> --- a/lib/librte_eal/common/eal_common_pci.c
> +++ b/lib/librte_eal/common/eal_common_pci.c
> @@ -146,10 +146,8 @@ pci_map_device(struct rte_pci_device *dev)
>  	/* try mapping the NIC resources using VFIO if it exists */
>  	switch (dev->kdrv) {
>  	case RTE_KDRV_VFIO:
> -#ifdef VFIO_PRESENT
>  		if (pci_vfio_is_enabled())
>  			ret = pci_vfio_map_resource(dev);
> -#endif
>  		break;
>  	case RTE_KDRV_IGB_UIO:
>  	case RTE_KDRV_UIO_GENERIC:
> diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h
> index e16bb68..10995c3 100644
> --- a/lib/librte_eal/common/eal_private.h
> +++ b/lib/librte_eal/common/eal_private.h
> @@ -174,6 +174,9 @@ int pci_unbind_kernel_driver(struct rte_pci_device *dev);
>   */
>  int pci_uio_map_resource(struct rte_pci_device *dev);
>  
> +int pci_vfio_is_enabled(void);
> +
> +int pci_vfio_map_resource(struct rte_pci_device *dev);
>  /**
>   * Unmap the PCI resource of a PCI device
>   *
> diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> index 426953a..3b5da34 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> @@ -909,4 +909,14 @@ pci_vfio_is_enabled(void)
>  {
>  	return vfio_cfg.vfio_enabled;
>  }
> +#else
> +int pci_vfio_is_enabled(void)
> +{
> +	return 0;
> +}
> +
> +int pci_vfio_map_resource(__rte_unused struct rte_pci_device *dev)
> +{
> +	return -1;
> +}
>  #endif

Tested-by: Tetsuya Mukawa <mukawa at igel.co.jp>
Acked-by: Tetsuya Mukawa <mukawa at igel.co.jp>


Hi Michael,


Thanks, I haven't checked it with vfio.
I've make sure the patch works fine with vfio and pci_uio_generic.

Regards,
Tetsuya



More information about the dev mailing list