Messages in this thread | | | Date | Mon, 23 Aug 2021 12:45:38 +0530 | From | Viresh Kumar <> | Subject | Re: [PATCH] opp: core: Check for pending links before reading required_opp pointers |
| |
On 22-08-21, 19:44, Marijn Suijten wrote: > Commit 4fa82a87ba55 ("opp: Allow required-opps to be used for non genpd > use cases") dereferences the pointers in required_opp_tables but these > might be set to an ERR_PTR if the list still has lazy links pending, > resulting in segfaults. Prior to this patch IS_ERR was also checked on > required_opp_tables[i] before reading ->is_genpd inside > _opp_table_alloc_required_tables, which is at the same time the > predicate to add this table to the lazy list. This segfault is solved > by reordering the checks to bail on lazy pending tables before reading > ->is_genpd. > > Fixes: 4fa82a87ba55 ("opp: Allow required-opps to be used for non genpd use cases") > Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@somainline.org> > Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org> > --- > drivers/opp/core.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/opp/core.c b/drivers/opp/core.c > index b335c077f215..4dd26a165c91 100644 > --- a/drivers/opp/core.c > +++ b/drivers/opp/core.c > @@ -893,6 +893,10 @@ static int _set_required_opps(struct device *dev, > if (!required_opp_tables) > return 0; > > + /* required-opps not fully initialized yet */ > + if (lazy_linking_pending(opp_table)) > + return -EBUSY; > + > /* > * We only support genpd's OPPs in the "required-opps" for now, as we > * don't know much about other use cases. Error out if the required OPP > @@ -903,10 +907,6 @@ static int _set_required_opps(struct device *dev, > return -ENOENT; > } > > - /* required-opps not fully initialized yet */ > - if (lazy_linking_pending(opp_table)) > - return -EBUSY; > - > /* Single genpd case */ > if (!genpd_virt_devs) > return _set_required_opp(dev, dev, opp, 0);
Applied. Thanks.
-- viresh
| |