From: sashiko-bot@kernel.org
To: "Han Gao" <gaohan@iscas.ac.cn>
Cc: conor+dt@kernel.org, devicetree@vger.kernel.org, robh@kernel.org
Subject: Re: [PATCH 2/4] spi: sg2044-nor: Honor SPI clock limits
Date: Thu, 17 Sep 2026 14:39:24 +0000 [thread overview]
Message-ID: <20260917143924.8E0CE1F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260917-fix-sg204xspi-v1-2-5c95dac429a8@iscas.ac.cn>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] spi: sg2044-nor: AB-BA deadlock between spifmc->lock and CCF prepare_lock
--
commit fd13672e4c9fa0fb60925d0020a99edbeb412a79
Author: Han Gao <gaohan@iscas.ac.cn>
spi: sg2044-nor: Honor SPI clock limits
The fixed divider ignores device and operation clock limits. Calculate
the divider before each transfer so SCK does not exceed either limit.
> diff --git a/drivers/spi/spi-sg2044-nor.c b/drivers/spi/spi-sg2044-nor.c
> index ff026ca0f7663..f2a1074f68477 100644
> --- a/drivers/spi/spi-sg2044-nor.c
> +++ b/drivers/spi/spi-sg2044-nor.c
[ ... ]
> @@ -385,6 +385,29 @@ static ssize_t sg2044_spifmc_trans_reg(struct sg2044_spifmc *spifmc,
> return 0;
> }
>
> +static int sg2044_spifmc_set_speed(struct sg2044_spifmc *spifmc,
> + unsigned int speed_hz)
> +{
> + unsigned long rate = clk_get_rate(spifmc->clk);
[Severity: High]
Does this sequence introduce an AB-BA deadlock between the local hardware
lock and the global Common Clock Framework prepare_lock?
In sg2044_spifmc_exec_op(), the data-plane hot path for SPI NOR transfers
acquires the local lock:
mutex_lock(&spifmc->lock);
It then calls sg2044_spifmc_set_speed(), which unconditionally queries the
clock framework here via clk_get_rate().
Under the Common Clock Framework, clk_get_rate() acquires the global
prepare_lock mutex. This creates a lock hierarchy inversion. If a thread
holding prepare_lock (e.g., during clk_prepare() which may require
firmware or trigger a page fault) requires a read from the SPI NOR flash,
it will block waiting for spifmc->lock. Concurrently, an SPI NOR operation
holding spifmc->lock will block waiting for prepare_lock.
Additionally, repeatedly acquiring a global subsystem mutex in a hot data
path can cause severe performance bottlenecks for clock operations
system-wide.
Could the clock rate be cached during probe() instead of querying it per
transfer?
> + u64 div;
> + u32 reg;
> +
> + if (!rate || !speed_hz)
> + return -EINVAL;
[ ... ]
> @@ -395,11 +418,18 @@ static int sg2044_spifmc_exec_op(struct spi_mem *mem,
>
> mutex_lock(&spifmc->lock);
>
> + ret = sg2044_spifmc_set_speed(spifmc, op->max_freq ?
> + min(op->max_freq, mem->spi->max_speed_hz) :
> + mem->spi->max_speed_hz);
> + if (ret)
> + goto out_unlock;
> +
> if (op->addr.nbytes == 0)
> ret = sg2044_spifmc_trans_reg(spifmc, op);
> else
> ret = sg2044_spifmc_trans(spifmc, op);
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260917-fix-sg204xspi-v1-0-5c95dac429a8@iscas.ac.cn?part=2
next prev parent reply other threads:[~2026-09-17 14:39 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-17 14:29 [PATCH 0/4] spi: sophgo: Fix SPI NOR errors and clock limits Han Gao
2026-09-17 14:29 ` Han Gao
2026-09-17 14:29 ` [PATCH 1/4] spi: sg2044-nor: Return transfer errors Han Gao
2026-09-17 14:29 ` Han Gao
2026-09-17 14:29 ` [PATCH 2/4] spi: sg2044-nor: Honor SPI clock limits Han Gao
2026-09-17 14:29 ` Han Gao
2026-09-17 14:39 ` sashiko-bot [this message]
2026-09-17 20:38 ` Mark Brown
2026-09-17 20:38 ` Mark Brown
2026-09-17 14:29 ` [PATCH 3/4] riscv: dts: sophgo: Enable SPI NOR on SRD3-10 Han Gao
2026-09-17 14:29 ` Han Gao
2026-09-17 14:29 ` [PATCH 4/4] riscv: dts: sophgo: Limit SG2042 SPI NOR to 12.5 MHz Han Gao
2026-09-17 14:29 ` Han Gao
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=20260917143924.8E0CE1F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gaohan@iscas.ac.cn \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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.