[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-id: <1471354514-24224-1-git-send-email-k.kozlowski@samsung.com>
Date: Tue, 16 Aug 2016 15:34:57 +0200
From: Krzysztof Kozlowski <k.kozlowski@...sung.com>
To: Michael Turquette <mturquette@...libre.com>,
Stephen Boyd <sboyd@...eaurora.org>,
Stephen Warren <swarren@...dotorg.org>,
Lee Jones <lee@...nel.org>, Eric Anholt <eric@...olt.net>,
Florian Fainelli <f.fainelli@...il.com>,
Ray Jui <rjui@...adcom.com>,
Scott Branden <sbranden@...adcom.com>,
bcm-kernel-feedback-list@...adcom.com,
Krzysztof Kozlowski <k.kozlowski@...sung.com>,
Sylwester Nawrocki <s.nawrocki@...sung.com>,
Tomasz Figa <tomasz.figa@...il.com>,
Kukjin Kim <kgene@...nel.org>,
Russell King <linux@...linux.org.uk>,
Mark Brown <broonie@...nel.org>, linux-clk@...r.kernel.org,
linux-rpi-kernel@...ts.infradead.org,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-samsung-soc@...r.kernel.org, linux-i2c@...r.kernel.org,
alsa-devel@...a-project.org
Cc: Marek Szyprowski <m.szyprowski@...sung.com>,
Charles Keepax <ckeepax@...nsource.wolfsonmicro.com>,
Javier Martinez Canillas <javier@....samsung.com>,
a.hajda@...sung.com,
Bartlomiej Zolnierkiewicz <b.zolnierkie@...sung.com>
Subject: [RFC 00/17] clk: Add per-controller locks to fix deadlocks
Hi,
RFC, please, do not apply, maybe except patch #1 which is harmless.
Introduction
============
The patchset brings new entity: clock controller representing a hardware
block. The clock controller comes with its own prepare lock which
is used then in many places. The idea is to fix the deadlock mentioned
in commit 10ff4c5239a1 ("i2c: exynos5: Fix possible ABBA deadlock by keeping
I2C clock prepared") and commit 34e81ad5f0b6 ("i2c: s3c2410: fix ABBA deadlock
by keeping clock prepared").
Disclaimer
==========
Request for comments, so:
1. Only exynos_defconfig builds,
2. A lot of FIXME/TODO note still,
3. Checkpatch not run, lines not aligned,
4. Other (non-exynos) drivers not converted,
5. Probably not yet bisectable,
6. Locking became quite complex.
The previous one lock was simple. Inefficient and dead-lock prone but
simple. Because of clock hierarchy spanning through controllers, the
new locking became quite complicated. I don't like it but...
Details
=======
In Exynos-based boards case the deadlock occurs between clock's
prepare_lock and regmap-i2c's lock:
CPU #0: CPU #1:
lock(regmap)
s2mps11-clk: clk_prepare_lock()
i2c-exynos: clk_prepare_lock() - wait
lock(regmap) - wait
The clk_prepare_lock() on both CPUs come from different clock drivers
and components:
1. I2C clock is part of SoC block and is required by i2c-s3c2410/i2c-exynos5
driver,
2. S2MPS11 clock is separate device, however driver uses I2C regmap.
The deadlock was reported by lockdep (always) and was happening
in 20% of boots of Odroid XU3 with multi_v7 defconfig. Workaround for
deadlock was implemented by removing prepare/unprepare calls from I2C
transfers. However these are just workarounds... which after applying
this patch can be reverted.
Additionally Marek Szyprowski's work on domains/clocks/pinctrl exposed
the deadlock again in different configuration.
Comments as usual are welcomed.
Best regards,
Krzysztof
Krzysztof Kozlowski (17):
clk: bcm2835: Rename clk_register to avoid name conflict
clk: Add clock controller to fine-grain the prepare lock
clk: s2mps11: Switch to new clock controller API
clk: samsung: Allocate a clock controller in context
clk: fixed-rate: Switch to new clock controller API
clk: gate: Switch to new clock controller API
clk: mux: Switch to new clock controller API
clk: fixed-factor: Switch to new clock controller API
clk: divider: Switch to new clock controller API
clk: composite: Switch to new clock controller API
clk: gpio: Switch to new clock controller API
ASoC: samsung: Switch to new clock controller API
clk: samsung: audss: samsung: Switch to new clock controller API
clk: samsung: clkout: samsung: Switch to new clock controller API
clk: Use per-controller locking
Revert "i2c: exynos5: Fix possible ABBA deadlock by keeping I2C clock
prepared"
Revert "i2c: s3c2410: fix ABBA deadlock by keeping clock prepared"
drivers/clk/bcm/clk-bcm2835.c | 8 +-
drivers/clk/clk-composite.c | 8 +-
drivers/clk/clk-divider.c | 10 +-
drivers/clk/clk-fixed-factor.c | 11 +-
drivers/clk/clk-fixed-rate.c | 28 +-
drivers/clk/clk-fractional-divider.c | 5 +-
drivers/clk/clk-gate.c | 8 +-
drivers/clk/clk-gpio.c | 29 +-
drivers/clk/clk-mux.c | 32 ++-
drivers/clk/clk-s2mps11.c | 10 +-
drivers/clk/clk.c | 456 +++++++++++++++++++++++++++-----
drivers/clk/samsung/clk-exynos-audss.c | 30 ++-
drivers/clk/samsung/clk-exynos-clkout.c | 11 +-
drivers/clk/samsung/clk.c | 25 +-
drivers/clk/samsung/clk.h | 1 +
drivers/i2c/busses/i2c-exynos5.c | 24 +-
drivers/i2c/busses/i2c-s3c2410.c | 23 +-
include/linux/clk-provider.h | 88 ++++--
include/linux/clk.h | 1 +
sound/soc/samsung/i2s.c | 13 +-
20 files changed, 612 insertions(+), 209 deletions(-)
--
1.9.1
Powered by blists - more mailing lists