[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