Re: [PATCH 07/10] bus/fsl-mc: Export a dprc scan function to be used by multiple entities

From: Laurentiu Tudor
Date: Mon Mar 23 2020 - 08:48:51 EST




On 3/19/2020 5:40 PM, Diana Craciun wrote:
> Currently the DPRC scan function is used only by the bus driver.
> But the same functionality will be needed by the VFIO driver.
> To support this, the dprc scan function was exported and a little
> bit adjusted to fit both scenarios.
>
> Signed-off-by: Diana Craciun <diana.craciun@xxxxxxxxxxx>
> ---
> drivers/bus/fsl-mc/dprc-driver.c | 15 ++++++---------
> drivers/bus/fsl-mc/fsl-mc-bus.c | 2 ++
> include/linux/fsl/mc.h | 4 ++++
> 3 files changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
> index 7eaf78900dfc..789220f0372a 100644
> --- a/drivers/bus/fsl-mc/dprc-driver.c
> +++ b/drivers/bus/fsl-mc/dprc-driver.c
> @@ -335,7 +335,9 @@ static int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev,
> * bus driver with the actual state of the MC by adding and removing
> * devices as appropriate.
> */
> -static int dprc_scan_container(struct fsl_mc_device *mc_bus_dev)
> +int dprc_scan_container(struct fsl_mc_device *mc_bus_dev,
> + const char *driver_override,
> + bool alloc_interrupts)
> {
> int error;
> struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
> @@ -346,15 +348,12 @@ static int dprc_scan_container(struct fsl_mc_device *mc_bus_dev)
> * Discover objects in the DPRC:
> */
> mutex_lock(&mc_bus->scan_mutex);
> - error = dprc_scan_objects(mc_bus_dev, NULL, true);
> + error = dprc_scan_objects(mc_bus_dev, driver_override, alloc_interrupts);
> mutex_unlock(&mc_bus->scan_mutex);
> - if (error < 0) {
> - fsl_mc_cleanup_all_resource_pools(mc_bus_dev);
> - return error;
> - }
>
> return 0;
> }
> +EXPORT_SYMBOL_GPL(dprc_scan_container);
>
> /**
> * dprc_irq0_handler - Regular ISR for DPRC interrupt 0
> @@ -679,12 +678,10 @@ static int dprc_probe(struct fsl_mc_device *mc_dev)
> goto error_cleanup_open;
> }
>
> - mutex_init(&mc_bus->scan_mutex);
> -

It's not obvious that this is related, maybe it should be mentioned in
the commit message.

> /*
> * Discover MC objects in DPRC object:
> */
> - error = dprc_scan_container(mc_dev);
> + error = dprc_scan_container(mc_dev, NULL, true);
> if (error < 0)
> goto error_cleanup_open;
>
> diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c
> index a99a0edef252..1865221bb12d 100644
> --- a/drivers/bus/fsl-mc/fsl-mc-bus.c
> +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
> @@ -635,7 +635,9 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
> if (!mc_bus)
> return -ENOMEM;
>
> + mutex_init(&mc_bus->scan_mutex);
> mc_dev = &mc_bus->mc_dev;
> +

nit: extra white space.

---
Best Regards, Laurentiu

> } else {
> /*
> * Allocate a regular fsl_mc_device object:
> diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
> index b9d5e5955adb..2bdd96a482fb 100644
> --- a/include/linux/fsl/mc.h
> +++ b/include/linux/fsl/mc.h
> @@ -476,6 +476,10 @@ int dprc_reset_container(struct fsl_mc_io *mc_io,
> u16 token,
> int child_container_id);
>
> +int dprc_scan_container(struct fsl_mc_device *mc_bus_dev,
> + const char *driver_override,
> + bool alloc_interrupts);
> +
> /*
> * Data Path Buffer Pool (DPBP) API
> * Contains initialization APIs and runtime control APIs for DPBP
>