From: "Mario Limonciello (AMD) (kernel.org)" <superm1@kernel.org>
To: Pratap Nirujogi <pratap.nirujogi@amd.com>,
andi.shyti@kernel.org, andriy.shevchenko@linux.intel.com,
mlimonci@amd.com, mika.westerberg@linux.intel.com,
jsd@semihalf.com
Cc: rafael.j.wysocki@intel.com, benjamin.chan@amd.com,
bin.du@amd.com, king.li@amd.com, linux-i2c@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] i2c: designware: amdisp: Fix resume-probe race condition issue
Date: Fri, 20 Mar 2026 15:32:35 -0500 [thread overview]
Message-ID: <4e90b485-da1b-40e5-95ae-17f6bc99cf57@kernel.org> (raw)
In-Reply-To: <20260320201302.3490570-1-pratap.nirujogi@amd.com>
On 3/20/2026 3:12 PM, Pratap Nirujogi wrote:
> Identified resume-probe race condition in kernel v7.0 with the commit
> 38fa29b01a6a ("i2c: designware: Combine the init functions"),but this
> issue existed from the beginning though not detected.
>
> The amdisp i2c device requires ISP to be in power-on state for probe
> to succeed. To meet this requirement, this device is added to genpd
> to control ISP power using runtime PM. The pm_runtime_get_sync() called
> before i2c_dw_probe() triggers PM resume, which powers on ISP and also
> invokes the amdisp i2c runtime resume before the probe completes resulting
> in this race condition and a NULL dereferencing issue in v7.0
>
> Fix this race condition by using the genpd APIs directly during probe:
> - Call dev_pm_genpd_resume() to Power ON ISP before probe
> - Call dev_pm_genpd_suspend() to Power OFF ISP after probe
> - Set the device to suspended state with pm_runtime_set_suspended()
> - Enable runtime PM only after the device is fully initialized
>
> Fixes: d6263c468a761 ("i2c: amd-isp: Add ISP i2c-designware driver")
> Co-developed-by: Bin Du <bin.du@amd.com>
> Signed-off-by: Bin Du <bin.du@amd.com>
> Signed-off-by: Pratap Nirujogi <pratap.nirujogi@amd.com>
Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
> ---
> Changes v1 -> v2:
>
> * Fixed resume-probe race condition issue
> * Removed NULL check in runtime_resume
> * Updated Fixes tag with appropriate commit
> * Added Signed-off-by for Co-developed-by tag
>
> drivers/i2c/busses/i2c-designware-amdisp.c | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-designware-amdisp.c b/drivers/i2c/busses/i2c-designware-amdisp.c
> index c48728ad9f6f2..9f0ec0fae6f23 100644
> --- a/drivers/i2c/busses/i2c-designware-amdisp.c
> +++ b/drivers/i2c/busses/i2c-designware-amdisp.c
> @@ -7,6 +7,7 @@
>
> #include <linux/module.h>
> #include <linux/platform_device.h>
> +#include <linux/pm_domain.h>
> #include <linux/pm_runtime.h>
> #include <linux/soc/amd/isp4_misc.h>
>
> @@ -76,22 +77,20 @@ static int amd_isp_dw_i2c_plat_probe(struct platform_device *pdev)
>
> device_enable_async_suspend(&pdev->dev);
>
> - pm_runtime_enable(&pdev->dev);
> - pm_runtime_get_sync(&pdev->dev);
> -
> + dev_pm_genpd_resume(&pdev->dev);
> ret = i2c_dw_probe(isp_i2c_dev);
> if (ret) {
> dev_err_probe(&pdev->dev, ret, "i2c_dw_probe failed\n");
> goto error_release_rpm;
> }
> -
> - pm_runtime_put_sync(&pdev->dev);
> + dev_pm_genpd_suspend(&pdev->dev);
> + pm_runtime_set_suspended(&pdev->dev);
> + pm_runtime_enable(&pdev->dev);
>
> return 0;
>
> error_release_rpm:
> amd_isp_dw_i2c_plat_pm_cleanup(isp_i2c_dev);
> - pm_runtime_put_sync(&pdev->dev);
> return ret;
> }
>
next prev parent reply other threads:[~2026-03-20 20:32 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-20 20:12 [PATCH v2] i2c: designware: amdisp: Fix resume-probe race condition issue Pratap Nirujogi
2026-03-20 20:25 ` Andy Shevchenko
2026-03-20 20:32 ` Mario Limonciello (AMD) (kernel.org) [this message]
2026-03-23 5:54 ` Mika Westerberg
2026-03-25 20:17 ` Andi Shyti
2026-03-25 20:36 ` Nirujogi, Pratap
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=4e90b485-da1b-40e5-95ae-17f6bc99cf57@kernel.org \
--to=superm1@kernel.org \
--cc=andi.shyti@kernel.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=benjamin.chan@amd.com \
--cc=bin.du@amd.com \
--cc=jsd@semihalf.com \
--cc=king.li@amd.com \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
--cc=mlimonci@amd.com \
--cc=pratap.nirujogi@amd.com \
--cc=rafael.j.wysocki@intel.com \
/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.