Messages in this thread | | | From | Rob Herring <> | Date | Fri, 2 Oct 2020 09:07:55 -0500 | Subject | Re: [PATCH v1] of: platform: Batch fwnode parsing in the init_machine() path |
| |
On Thu, Oct 1, 2020 at 5:59 PM Saravana Kannan <saravanak@google.com> wrote: > > When commit 93d2e4322aa7 ("of: platform: Batch fwnode parsing when > adding all top level devices") optimized the fwnode parsing when all top > level devices are added, it missed out optimizing this for platform > where the top level devices are added through the init_machine() path. > > This commit does the optimization for all paths by simply moving the > fw_devlink_pause/resume() inside of_platform_default_populate(). > > Reported-by: Tomi Valkeinen <tomi.valkeinen@ti.com> > Signed-off-by: Saravana Kannan <saravanak@google.com> > --- > drivers/of/platform.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) > > diff --git a/drivers/of/platform.c b/drivers/of/platform.c > index 071f04da32c8..79972e49b539 100644 > --- a/drivers/of/platform.c > +++ b/drivers/of/platform.c > @@ -501,8 +501,21 @@ int of_platform_default_populate(struct device_node *root, > const struct of_dev_auxdata *lookup, > struct device *parent) > { > - return of_platform_populate(root, of_default_bus_match_table, lookup, > - parent); > + int ret; > + > + /* > + * fw_devlink_pause/resume() are only safe to be called around top > + * level device addition due to locking constraints. > + */ > + if (!root) > + fw_devlink_pause(); > + > + ret = of_platform_populate(root, of_default_bus_match_table, lookup, > + parent);
of_platform_default_populate() vs. of_platform_populate() is just a different match table. I don't think the behavior should otherwise be different.
There's also of_platform_probe() which has slightly different matching behavior. It should not behave differently either with respect to devlinks.
Rob
| |