[dpdk-dev] [PATCH v2] bus/pci: use device driver name instead of handler type
Burakov, Anatoly
anatoly.burakov at intel.com
Fri Oct 26 16:03:39 CEST 2018
On 25-Oct-18 11:49 AM, Alejandro Lucero wrote:
> Invoking the right pci read/write functions is based on interrupt
> handler type. However, this is not configured for secondary processes
> precluding to use those functions.
>
> This patch fixes the issue using the driver name the device is bound
> to instead.
>
> Fixes: 632b2d1deeed ("eal: provide functions to access PCI config")
>
> v2:
> - Use #ifdef for VFIO functions
>
> Signed-off-by: Alejandro Lucero <alejandro.lucero at netronome.com>
> ---
> drivers/bus/pci/linux/pci.c | 32 ++++++++++++++------------------
> 1 file changed, 14 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c
> index 5cf78d7..59a2086 100644
> --- a/drivers/bus/pci/linux/pci.c
> +++ b/drivers/bus/pci/linux/pci.c
> @@ -673,23 +673,21 @@ enum rte_iova_mode
> int rte_pci_read_config(const struct rte_pci_device *device,
> void *buf, size_t len, off_t offset)
> {
> + char devname[RTE_DEV_NAME_MAX_LEN] = {0};
Probably "" instead of {0} is better. Same in other case.
Otherwise, LGTM
Acked-by: Anatoly Burakov <anatoly.burakov at intel.com>
> const struct rte_intr_handle *intr_handle = &device->intr_handle;
>
> - switch (intr_handle->type) {
> - case RTE_INTR_HANDLE_UIO:
> - case RTE_INTR_HANDLE_UIO_INTX:
> + switch (device->kdrv) {
> + case RTE_KDRV_IGB_UIO:
> return pci_uio_read_config(intr_handle, buf, len, offset);
> -
> #ifdef VFIO_PRESENT
> - case RTE_INTR_HANDLE_VFIO_MSIX:
> - case RTE_INTR_HANDLE_VFIO_MSI:
> - case RTE_INTR_HANDLE_VFIO_LEGACY:
> + case RTE_KDRV_VFIO:
> return pci_vfio_read_config(intr_handle, buf, len, offset);
> #endif
> default:
> + rte_pci_device_name(&device->addr, devname,
> + RTE_DEV_NAME_MAX_LEN);
> RTE_LOG(ERR, EAL,
> - "Unknown handle type of fd %d\n",
> - intr_handle->fd);
> + "Unknown driver type for %s\n", devname);
> return -1;
> }
> }
> @@ -698,23 +696,21 @@ int rte_pci_read_config(const struct rte_pci_device *device,
> int rte_pci_write_config(const struct rte_pci_device *device,
> const void *buf, size_t len, off_t offset)
> {
> + char devname[RTE_DEV_NAME_MAX_LEN] = {0};
> const struct rte_intr_handle *intr_handle = &device->intr_handle;
>
> - switch (intr_handle->type) {
> - case RTE_INTR_HANDLE_UIO:
> - case RTE_INTR_HANDLE_UIO_INTX:
> + switch (device->kdrv) {
> + case RTE_KDRV_IGB_UIO:
> return pci_uio_write_config(intr_handle, buf, len, offset);
> -
> #ifdef VFIO_PRESENT
> - case RTE_INTR_HANDLE_VFIO_MSIX:
> - case RTE_INTR_HANDLE_VFIO_MSI:
> - case RTE_INTR_HANDLE_VFIO_LEGACY:
> + case RTE_KDRV_VFIO:
> return pci_vfio_write_config(intr_handle, buf, len, offset);
> #endif
> default:
> + rte_pci_device_name(&device->addr, devname,
> + RTE_DEV_NAME_MAX_LEN);
> RTE_LOG(ERR, EAL,
> - "Unknown handle type of fd %d\n",
> - intr_handle->fd);
> + "Unknown driver type for %s\n", devname);
> return -1;
> }
> }
>
--
Thanks,
Anatoly
More information about the dev
mailing list