Messages in this thread | | | Date | Fri, 15 Jan 2021 16:17:18 +0100 | From | Thierry Reding <> | Subject | Re: [PATCH v2 2/5] clk: tegra: Fix refcounting of gate clocks |
| |
On Tue, Jan 12, 2021 at 03:27:21PM +0300, Dmitry Osipenko wrote: > The refcounting of the gate clocks has a bug causing the enable_refcnt > to underflow when unused clocks are disabled. This happens because clk > provider erroneously bumps the refcount if clock is enabled at a boot > time, which it shouldn't be doing, and it does this only for the gate > clocks, while peripheral clocks are using the same gate ops and the > peripheral clocks are missing the initial bump. Hence the refcount of > the peripheral clocks is 0 when unused clocks are disabled and then the > counter is decremented further by the gate ops, causing the integer > underflow. > > Fix this problem by removing the erroneous bump and by implementing the > disable_unused() callback, which disables the unused gates properly. > > The visible effect of the bug is such that the unused clocks are never > gated if a loaded kernel module grabs the unused clocks and starts to use > them. In practice this shouldn't cause any real problems for the drivers > and boards supported by the kernel today. > > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > --- > drivers/clk/tegra/clk-periph-gate.c | 72 +++++++++++++++++++---------- > drivers/clk/tegra/clk-periph.c | 11 +++++ > 2 files changed, 58 insertions(+), 25 deletions(-)
Acked-by: Thierry Reding <treding@nvidia.com> [unhandled content-type:application/pgp-signature] | |