2009/9/16 Kalle Jokiniemi <kalle.jokiniemi@xxxxxxxxx>: > There is a possible race condition in clockdomain > code handling hw supported idle transitions. > > When multiple autodeps dependencies are being added > or removed, a transition of still remaining dependent > powerdomain can result in false readings of the > state counter. This is especially fatal for off mode > state counter, as it could result in a driver not > noticing a context loss. > > Fixed by disabling hw supported state transitions > when autodeps are being changed. > > Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@xxxxxxxxx> > --- > arch/arm/mach-omap2/clockdomain.c | 74 ++++++++++++++++++++++--------------- > 1 files changed, 44 insertions(+), 30 deletions(-) > > diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c > index 4ef7b4f..1a8c386 100644 > --- a/arch/arm/mach-omap2/clockdomain.c > +++ b/arch/arm/mach-omap2/clockdomain.c > @@ -137,6 +137,36 @@ static void _clkdm_del_autodeps(struct clockdomain *clkdm) > } > } > > +/* > + * _omap2_clkdm_set_hwsup - set high the hwsup idle transition bit > + * @clkdm: struct clockdomain * > + * @enable: int 0 to disable, 1 to enable > + * > + * Internal helper for actually switching the bit that controls hwsup > + * idle transitions for clkdm. > + */ "static" missing here. > +void _omap2_clkdm_set_hwsup(struct clockdomain *clkdm, int enable) > +{ > + u32 v; > + > + if (cpu_is_omap24xx()) { > + if (enable) > + v = OMAP24XX_CLKSTCTRL_ENABLE_AUTO; > + else > + v = OMAP24XX_CLKSTCTRL_DISABLE_AUTO; > + } else if (cpu_is_omap34xx()) { > + if (enable) > + v = OMAP34XX_CLKSTCTRL_ENABLE_AUTO; > + else > + v = OMAP34XX_CLKSTCTRL_DISABLE_AUTO; > + } else { > + BUG(); > + } > + > + cm_rmw_mod_reg_bits(clkdm->clktrctrl_mask, > + v << __ffs(clkdm->clktrctrl_mask), > + clkdm->pwrdm.ptr->prcm_offs, CM_CLKSTCTRL); > +} > > static struct clockdomain *_clkdm_lookup(const char *name) > { [...] Regards, Tommi Rantala -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html