From: Peng Fan <peng.fan@oss.nxp.com>
To: Carlos Song <carlos.song@nxp.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
Stephen Boyd <sboyd@kernel.org>
Cc: "mturquette@baylibre.com" <mturquette@baylibre.com>,
"sboyd@kernel.org" <sboyd@kernel.org>,
"rafael@kernel.org" <rafael@kernel.org>,
"pavel@kernel.org" <pavel@kernel.org>,
"len.brown@intel.com" <len.brown@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"dakr@kernel.org" <dakr@kernel.org>,
Aisheng Dong <aisheng.dong@nxp.com>,
Andi Shyti <andi.shyti@kernel.org>,
"shawnguo@kernel.org" <shawnguo@kernel.org>,
"s.hauer@pengutronix.de" <s.hauer@pengutronix.de>,
"kernel@pengutronix.de" <kernel@pengutronix.de>,
"festevam@gmail.com" <festevam@gmail.com>,
Frank Li <frank.li@nxp.com>,
"linux-clk@vger.kernel.org" <linux-clk@vger.kernel.org>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>,
"imx@lists.linux.dev" <imx@lists.linux.dev>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Bough Chen <haibo.chen@nxp.com>, Jun Li <jun.li@nxp.com>
Subject: Re: Dead lock with clock global prepare_lock mutex and device's power.runtime_status
Date: Mon, 7 Jul 2025 18:58:16 +0800 [thread overview]
Message-ID: <20250707105816.GF11488@nxa18884-linux> (raw)
In-Reply-To: <VI2PR04MB11147CCEFE4204B852807AAF2E841A@VI2PR04MB11147.eurprd04.prod.outlook.com>
+Ulf
On Tue, Jul 01, 2025 at 03:16:08AM +0000, Carlos Song wrote:
>Hi, All:
>
>We met the dead lock issue recently and think it should be common issue and not sure how to fix it.
>
>We use gpio-gate-clock clock provider (drivers/clk/clk-gpio.c), gpio is one of i2c gpio expander (drivers/gpio/gpio-pcf857x.c). Our i2c driver enable run time pm (drivers/i2c/busses/i2c-imx-lpi2c.c [1]). System random blocked when at reboot.
>
>The dead lock happen as below call stacks
>
>Task 117 Task 120
>
>schedule()
>clk_prepare_lock()--> wait prepare_lock(mutex_lock) schedule() wait for power.runtime_status exit RPM_SUSPENDING
> ^^^^ A ^^^^ B
>clk_bulk_unprepare() rpm_resume()
>lpi2c_runtime_suspend() pm_runtime_resume_and_get()
>... lpi2c_imx_xfer()
> ...
>rpm_suspend() set RPM_SUSPENDING pcf857x_set();
> ^^^^ B ...
> clk_prepare_lock() --> hold prepare_lock
> ^^^^ A
> ...
>
This is a common issue that clk use a big prepare lock which is easy
to trigger dead lock with runtime pm. I recalled that pengutronix raised
this, but could not find the information.
In this case, there are two clock providers that are independent.
So I think using one global prepare lock does not make sense here.
Stephen,
I propose using a per provider prepare lock if the providers are
totally independent. How do you think?
Thanks,
Peng
next prev parent reply other threads:[~2025-07-07 9:48 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-01 3:16 Dead lock with clock global prepare_lock mutex and device's power.runtime_status Carlos Song
2025-07-07 10:58 ` Peng Fan [this message]
2025-07-07 10:36 ` Marc Kleine-Budde
2025-07-07 17:28 ` Chen-Yu Tsai
2025-07-22 9:14 ` Miquel Raynal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250707105816.GF11488@nxa18884-linux \
--to=peng.fan@oss.nxp.com \
--cc=aisheng.dong@nxp.com \
--cc=andi.shyti@kernel.org \
--cc=carlos.song@nxp.com \
--cc=dakr@kernel.org \
--cc=festevam@gmail.com \
--cc=frank.li@nxp.com \
--cc=gregkh@linuxfoundation.org \
--cc=haibo.chen@nxp.com \
--cc=imx@lists.linux.dev \
--cc=jun.li@nxp.com \
--cc=kernel@pengutronix.de \
--cc=len.brown@intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mturquette@baylibre.com \
--cc=pavel@kernel.org \
--cc=rafael@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=sboyd@kernel.org \
--cc=shawnguo@kernel.org \
--cc=ulf.hansson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.