[dpdk-dev] [PATCH v2 2/8] bus/fslmc: run secondary debug app without blocklist devices

Hemant Agrawal hemant.agrawal at nxp.com
Mon Sep 14 12:49:52 CEST 2020


Hi,
> -----Original Message-----
> From: Sachin Saxena (OSS) <sachin.saxena at oss.nxp.com>
> Sent: Friday, September 11, 2020 2:05 PM
> To: dev at dpdk.org; ferruh.yigit at intel.com
> Cc: Sachin Saxena (OSS) <sachin.saxena at oss.nxp.com>
> Subject: [PATCH v2 2/8] bus/fslmc: run secondary debug app without
> blocklist devices
> 
> From: Rohit Raj <rohit.raj at nxp.com>
> 
> dpaa2 hw impose limits on some HW access devices like DPMCP(Mnagement
> control Port) and DPIO (HW portal). This causes issue in their usages in shared
> uses in case of multi-process applications. It can overcome by using
> allowlist/blocklist in primary and secondary applications.
> However it imposes restrictions on standard debugging apps like dpdk-
> procinfo, which can be used to debug any existing application.
> 
> This patch introduces reserving extra DPMCP and DPIO to be used by
> secondary process if devices are not blocked previously in primary application.
> This leaves the last DPMCP and DPIO for the secondary process usages.

[Hemant]  It may be good to also document this behavior in the dpaa2 nic guide. 

> 
> Signed-off-by: Rohit Raj <rohit.raj at nxp.com>
> Reviewed-by: Sachin Saxena <sachin.saxena at oss.nxp.com>
> ---
>  drivers/bus/fslmc/fslmc_vfio.c | 66
> +++++++++++++++++++++++++++++++---
>  1 file changed, 61 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
> index 9134ec552..6dd797632 100644
> --- a/drivers/bus/fslmc/fslmc_vfio.c
> +++ b/drivers/bus/fslmc/fslmc_vfio.c
> @@ -802,10 +802,29 @@ fslmc_vfio_process_group(void)
>  	int ret;
>  	int found_mportal = 0;
>  	struct rte_dpaa2_device *dev, *dev_temp;
> +	bool is_dpmcp_in_blocklist = false, is_dpio_in_blocklist = false;
> +	int dpmcp_count = 0, dpio_count = 0, current_device;
> +
> +	TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next,
> dev_temp) {
> +		if (dev->dev_type == DPAA2_MPORTAL) {
> +			dpmcp_count++;
> +			if (dev->device.devargs &&
> +			    dev->device.devargs->policy ==
> RTE_DEV_BLACKLISTED)
> +				is_dpmcp_in_blocklist = true;
> +		}
> +		if (dev->dev_type == DPAA2_IO) {
> +			dpio_count++;
> +			if (dev->device.devargs &&
> +			    dev->device.devargs->policy ==
> RTE_DEV_BLACKLISTED)
> +				is_dpmcp_in_blocklist = true;

 [Hemant]  This shall be is_dpio_in_blocklist

> +		}
> +	}
> 
>  	/* Search the MCP as that should be initialized first. */
> +	current_device = 0;
>  	TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next,
> dev_temp) {
>  		if (dev->dev_type == DPAA2_MPORTAL) {
> +			current_device++;
>  			if (dev->device.devargs &&
>  			    dev->device.devargs->policy ==
> RTE_DEV_BLACKLISTED) {
>  				DPAA2_BUS_LOG(DEBUG, "%s Blacklisted,
> skipping", @@ -815,13 +834,24 @@ fslmc_vfio_process_group(void)
>  				continue;
>  			}
> 
> -			ret = fslmc_process_mcp(dev);
> -			if (ret) {
> -				DPAA2_BUS_ERR("Unable to map MC
> Portal");
> -				return -1;
> +			if (rte_eal_process_type() ==
> RTE_PROC_SECONDARY &&
> +			    !is_dpmcp_in_blocklist) {
> +				if (dpmcp_count == 1 ||
> +				    current_device != dpmcp_count) {
> +
> 	TAILQ_REMOVE(&rte_fslmc_bus.device_list,
> +						     dev, next);
> +					continue;
> +				}
>  			}
> -			if (!found_mportal)
> +
> +			if (!found_mportal) {
> +				ret = fslmc_process_mcp(dev);
> +				if (ret) {
> +					DPAA2_BUS_ERR("Unable to map
> MC Portal");
> +					return -1;
> +				}
>  				found_mportal = 1;
> +			}
> 
>  			TAILQ_REMOVE(&rte_fslmc_bus.device_list, dev,
> next);
>  			free(dev);
> @@ -838,7 +868,10 @@ fslmc_vfio_process_group(void)
>  		return -1;
>  	}
> 
> +	current_device = 0;
>  	TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next,
> dev_temp) {
> +		if (dev->dev_type == DPAA2_IO)
> +			current_device++;
>  		if (dev->device.devargs &&
>  		    dev->device.devargs->policy == RTE_DEV_BLACKLISTED) {
>  			DPAA2_BUS_LOG(DEBUG, "%s Blacklisted, skipping",
> @@ -846,6 +879,14 @@ fslmc_vfio_process_group(void)
>  			TAILQ_REMOVE(&rte_fslmc_bus.device_list, dev,
> next);
>  			continue;
>  		}
> +		if (rte_eal_process_type() == RTE_PROC_SECONDARY &&
> +		    dev->dev_type != DPAA2_ETH &&
> +		    dev->dev_type != DPAA2_CRYPTO &&
> +		    dev->dev_type != DPAA2_QDMA &&
> +		    dev->dev_type != DPAA2_IO) {
> +			TAILQ_REMOVE(&rte_fslmc_bus.device_list, dev,
> next);
> +			continue;
> +		}
>  		switch (dev->dev_type) {
>  		case DPAA2_ETH:
>  		case DPAA2_CRYPTO:
> @@ -882,6 +923,21 @@ fslmc_vfio_process_group(void)
> 
>  			break;
>  		case DPAA2_IO:
> +			if (!is_dpio_in_blocklist && dpio_count > 1) {
> +				if (rte_eal_process_type() ==
> RTE_PROC_SECONDARY
> +				    && current_device != dpio_count) {
> +
> 	TAILQ_REMOVE(&rte_fslmc_bus.device_list,
> +						     dev, next);
> +					break;
> +				}
> +				if (rte_eal_process_type() ==
> RTE_PROC_PRIMARY
> +				    && current_device == dpio_count) {
> +
> 	TAILQ_REMOVE(&rte_fslmc_bus.device_list,
> +						     dev, next);
> +					break;
> +				}
> +			}
> +
>  			ret = fslmc_process_iodevices(dev);
>  			if (ret) {
>  				DPAA2_BUS_DEBUG("Dev (%s) init failed",
> --
> 2.28.0



More information about the dev mailing list