[dpdk-dev] [PATCH v3 07/10] bus/mlx5_pci: register a PCI driver
Parav Pandit
parav at mellanox.com
Fri Jul 3 14:53:22 CEST 2020
> From: Parav Pandit <parav at mellanox.com>
> Sent: Friday, July 3, 2020 2:43 PM
>
> Create a mlx5 bus driver framework for invoking drivers of multiple classes
> who have registered with the mlx5_pci bus driver.
[..]
> diff --git a/drivers/bus/mlx5_pci/mlx5_pci_bus.c
> b/drivers/bus/mlx5_pci/mlx5_pci_bus.c
> index 66db3c7b0..7344c2083 100644
> --- a/drivers/bus/mlx5_pci/mlx5_pci_bus.c
> +++ b/drivers/bus/mlx5_pci/mlx5_pci_bus.c
> @@ -2,13 +2,521 @@
> * Copyright 2020 Mellanox Technologies, Ltd
> */
> +static int
> +mlx5_bus_pci_dma_map(struct rte_pci_device *pci_dev, void *addr,
> + uint64_t iova, size_t len)
> +{
> + struct rte_mlx5_pci_driver *class;
> + struct rte_mlx5_pci_driver *temp;
> + struct mlx5_pci_device *dev;
> + int ret = -EINVAL;
> +
> + dev = pci_to_mlx5_device(pci_dev);
> + if (!dev)
> + return -ENODEV;
> + TAILQ_FOREACH_REVERSE(class, &drv_list, mlx5_pci_bus_drv_head,
> next) {
> + if (device_class_enabled(dev, class->dev_class) &&
> + class->pci_driver.dma_map) {
> + ret = class->pci_driver.dma_map(pci_dev, addr,
> + iova, len);
> + if (ret)
> + goto map_err;
> + }
> + }
> + return ret;
> +map_err:
> + TAILQ_FOREACH(temp, &drv_list, next) {
I made a mistake in reusing the logic of the dma_unmap() callback here.
This loop needs to follow same sequence as that what dma_map() does.
I will send the fix. Will wait for some time to gather if there are comments.
> + if (temp == class)
> + break;
> + if (device_class_enabled(dev, temp->dev_class) &&
> + temp->pci_driver.dma_map && temp-
> >pci_driver.dma_unmap)
> + temp->pci_driver.dma_unmap(pci_dev, addr, iova,
> len);
> + }
> + return ret;
> +}
More information about the dev
mailing list