On Thu, 8 Nov 2018 12:36:35 +0200 Tero Kristo <t-kristo@xxxxxx> wrote: > On 04/10/2018 23:38, Andreas Kemnade wrote: > > We have the scenario that first autoidle is disabled for all clocks, > > then it is disabled for selected ones and then enabled for all. So > > we should have some counting here, also according to the > > comment in _setup_iclk_autoidle() > > > > Signed-off-by: Andreas Kemnade <andreas@xxxxxxxxxxxx> > > --- > > drivers/clk/ti/autoidle.c | 32 ++++++++++++++++++++++++-------- > > include/linux/clk/ti.h | 1 + > > 2 files changed, 25 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/clk/ti/autoidle.c b/drivers/clk/ti/autoidle.c > > index 7bb9afbe4058..bb6cff168e73 100644 > > --- a/drivers/clk/ti/autoidle.c > > +++ b/drivers/clk/ti/autoidle.c > > @@ -37,6 +37,14 @@ struct clk_ti_autoidle { > > static LIST_HEAD(autoidle_clks); > > static LIST_HEAD(clk_hw_omap_clocks); > > > > +/* > > + * we have some non-atomic read/write > > + * operations behind it, so lets > > + * take one mutex for handling autoidle > > + * of all clocks > > + */ > > +static DEFINE_MUTEX(autoidle_mutex); > > Why mutex? This prevents calling the autoidle APIs from atomic context. > Did you check the mutex debug kernel configs with this? > Oops, I thought they were on, but they were not. OK, I am preparing a v2 of this thing. > This may cause problems with the runtime PM entries to the code at least. > > > > + > > /** > > * omap2_clk_deny_idle - disable autoidle on an OMAP clock > > * @clk: struct clk * to disable autoidle for > > @@ -48,8 +56,13 @@ int omap2_clk_deny_idle(struct clk *clk) > > struct clk_hw_omap *c; > > > > c = to_clk_hw_omap(__clk_get_hw(clk)); > > - if (c->ops && c->ops->deny_idle) > > - c->ops->deny_idle(c); > > + if (c->ops && c->ops->deny_idle) { > > + mutex_lock(&autoidle_mutex); > > + c->autoidle_count--; > > + if (c->autoidle_count == -1) > > I think you should swap the arithmetics here, all the other usecounters > use positive values, here you enter deep to the negative side when > autoidle is denied by multiple users, which might be confusing. > agreed. Regards, Andreas
Attachment:
pgp2N99D7TcmY.pgp
Description: OpenPGP digital signature