Hi, > -----Original Message----- > From: Sachin Saxena (OSS) <sachin.sax...@oss.nxp.com> > Sent: Friday, September 11, 2020 2:05 PM > To: dev@dpdk.org; ferruh.yi...@intel.com > Cc: Sachin Saxena (OSS) <sachin.sax...@oss.nxp.com> > Subject: [PATCH v2 2/8] bus/fslmc: run secondary debug app without > blocklist devices > > From: Rohit Raj <rohit....@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....@nxp.com> > Reviewed-by: Sachin Saxena <sachin.sax...@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