Hi Matan,

On 2/2/20 5:03 PM, Matan Azrad wrote:
> In order to support virtio queue creation by the FW, ROCE mode
> should be disabled in the device.
> 
> Do it by netlink which is like the devlink tool commands:
>       1. devlink dev param set pci/[pci] name enable_roce value false
>          cmode driverinit
>       2. devlink dev reload pci/[pci]
> Or by sysfs which is like:
>       echo 0 >  /sys/bus/pci/devices/[pci]/roce_enable
> 
> The IB device is matched again after ROCE disabling.
> 
> Signed-off-by: Matan Azrad <ma...@mellanox.com>
> Acked-by: Viacheslav Ovsiienko <viachesl...@mellanox.com>
> Acked-by: Maxime Coquelin <maxime.coque...@redhat.com>
> ---
>  drivers/vdpa/mlx5/Makefile    |   2 +-
>  drivers/vdpa/mlx5/meson.build |   2 +-
>  drivers/vdpa/mlx5/mlx5_vdpa.c | 191 
> ++++++++++++++++++++++++++++++++++--------
>  3 files changed, 160 insertions(+), 35 deletions(-)
...
> diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.c b/drivers/vdpa/mlx5/mlx5_vdpa.c
> index 57619d2..710f305 100644
> --- a/drivers/vdpa/mlx5/mlx5_vdpa.c
> +++ b/drivers/vdpa/mlx5/mlx5_vdpa.c

...

> @@ -246,8 +389,7 @@
>  mlx5_vdpa_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
>                   struct rte_pci_device *pci_dev __rte_unused)
>  {
> -     struct ibv_device **ibv_list;
> -     struct ibv_device *ibv_match = NULL;
> +     struct ibv_device *ibv;
>       struct mlx5_vdpa_priv *priv = NULL;
>       struct ibv_context *ctx = NULL;
>       struct mlx5_hca_attr attr;
> @@ -258,42 +400,25 @@
>                       " driver.");
>               return 1;
>       }
> -     errno = 0;
> -     ibv_list = mlx5_glue->get_device_list(&ret);
> -     if (!ibv_list) {
> -             rte_errno = ENOSYS;
> -             DRV_LOG(ERR, "Failed to get device list, is ib_uverbs loaded?");
> +     ibv = mlx5_vdpa_get_ib_device_match(&pci_dev->addr);
> +     if (!ibv) {
> +             DRV_LOG(ERR, "No matching IB device for PCI slot "
> +                     PCI_PRI_FMT ".", pci_dev->addr.domain,
> +                     pci_dev->addr.bus, pci_dev->addr.devid,
> +                     pci_dev->addr.function);
>               return -rte_errno;
> -     }
> -     while (ret-- > 0) {
> -             struct rte_pci_addr pci_addr;
> -
> -             DRV_LOG(DEBUG, "Checking device \"%s\"..", ibv_list[ret]->name);
> -             if (mlx5_dev_to_pci_addr(ibv_list[ret]->ibdev_path, &pci_addr))
> -                     continue;
> -             if (pci_dev->addr.domain != pci_addr.domain ||
> -                 pci_dev->addr.bus != pci_addr.bus ||
> -                 pci_dev->addr.devid != pci_addr.devid ||
> -                 pci_dev->addr.function != pci_addr.function)
> -                     continue;
> +     } else {
>               DRV_LOG(INFO, "PCI information matches for device \"%s\".",
> -                     ibv_list[ret]->name);
> -             ibv_match = ibv_list[ret];
> -             break;
> +                     ibv->name);
>       }
> -     mlx5_glue->free_device_list(ibv_list);
> -     if (!ibv_match) {
> -             DRV_LOG(ERR, "No matching IB device for PCI slot "
> -                     "%" SCNx32 ":%" SCNx8 ":%" SCNx8 ".%" SCNx8 ".",
> -                     pci_dev->addr.domain, pci_dev->addr.bus,
> -                     pci_dev->addr.devid, pci_dev->addr.function);
> -             rte_errno = ENOENT;
> -             return -rte_errno;
> +     if (mlx5_vdpa_roce_disable(&pci_dev->addr, &ibv) != 0) {
> +             DRV_LOG(WARNING, "Failed to disable ROCE for \"%s\".",
> +                     ibv->name);
> +             //return -rte_errno;
>       }

Is that commented return expected?

Reply via email to