[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