Linux SCSI subsystem development
 help / color / mirror / Atom feed
From: Bart Van Assche <bvanassche@acm.org>
To: Ziqi Chen <quic_ziqichen@quicinc.com>,
	quic_cang@quicinc.com, mani@kernel.org, beanhuo@micron.com,
	avri.altman@wdc.com, junwoo80.lee@samsung.com,
	martin.petersen@oracle.com, quic_nguyenb@quicinc.com,
	quic_nitirawa@quicinc.com, quic_rampraka@quicinc.com,
	neil.armstrong@linaro.org, luca.weiss@fairphone.com,
	konrad.dybcio@oss.qualcomm.com, peter.wang@mediatek.com
Cc: linux-arm-msm@vger.kernel.org, linux-scsi@vger.kernel.org,
	Alim Akhtar <alim.akhtar@samsung.com>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3] scsi: ufs: core: skip UFS clkscale if host asynchronous scan in progress
Date: Mon, 12 May 2025 15:31:36 -0700	[thread overview]
Message-ID: <c428f074-c010-4225-960e-56aa65a799d8@acm.org> (raw)
In-Reply-To: <5748d0cc-a603-4b44-bbfc-d39d684b2ea6@quicinc.com>

On 5/8/25 10:02 PM, Ziqi Chen wrote:
> 
> 
> On 5/9/2025 12:06 AM, Bart Van Assche wrote:
>> On 5/8/25 2:38 AM, Ziqi Chen wrote:
>>> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
>>> index 1c53ccf5a616..04f40677e76a 100644
>>> --- a/drivers/ufs/core/ufshcd.c
>>> +++ b/drivers/ufs/core/ufshcd.c
>>> @@ -1207,6 +1207,9 @@ static bool 
>>> ufshcd_is_devfreq_scaling_required(struct ufs_hba *hba,
>>>       if (list_empty(head))
>>>           return false;
>>> +    if (hba->host->async_scan)
>>> +        return false;
>>
>> Testing a boolean is never a proper way to synchronize code sections.
>> As an example, the SCSI core could set hba->host->async_scan after this
>> check completed and before the code below is executed. I think we need a
>> better solution.
> 
> Hi Bart,
> 
> I get your point, we have also taken this into consideration. That's why
> we move ufshcd_devfreq_init() out of ufshd_add_lus().
> 
> Old sequence:
> 
> | ufshcd_async_scan()
>    |ufshcd_add_lus()
>      |ufshcd_devfreq_init()
>      |  | enable UFS clock scaling
>      |scsi_scan_host()
>         |scsi_prep_async_scan()
>         |    | set host->async_scan to '1'
>         |async_schedule(do_scan_async, data)
> 
> With this old sequence , The ufs devfreq monitor started before the
> scsi_prep_async_scan(),  the SCSI core could set hba->host->async_scan
> after this check.
> 
> New sequence:
> 
> | ufshcd_async_scan()
>    |ufshcd_add_lus()
>    | |scsi_scan_host()
>    |    |scsi_prep_async_scan()
>    |    |    | set host->async_scan to '1'
>    |    |async_schedule(do_scan_async, data)
>    |ufshcd_devfreq_init()
>    |    |enable UFS clock scaling
> 
> With the new sequence , it is guaranteed that host->async_scan
> is set before the UFS clock scaling enabling.
> 
> I guess you might be worried about out-of-order execution will
> cause this flag not be set before clock scaling enabling with
> extremely low probability?
> If yes, do you have any suggestion on this ?

The new sequence depends on SCSI core internals that may change at
any time. SCSI drivers like the UFS drivers shouldn't depend on this
behavior since there are no guarantees that this behavior won't change.

Can host->scan_mutex be used to serialize clock scaling and LUN
scanning? I think this mutex is already used by a SCSI driver to
serialize against LUN addition and removal (storvsc).

Thanks,

Bart.

  reply	other threads:[~2025-05-12 22:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-08  9:38 [PATCH v3] scsi: ufs: core: skip UFS clkscale if host asynchronous scan in progress Ziqi Chen
2025-05-08 16:06 ` Bart Van Assche
2025-05-09  5:02   ` Ziqi Chen
2025-05-12 22:31     ` Bart Van Assche [this message]
2025-05-14  7:25       ` Ziqi Chen
2025-05-14  9:05         ` Peter Wang (王信友)
2025-05-21  8:56           ` Ziqi Chen

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=c428f074-c010-4225-960e-56aa65a799d8@acm.org \
    --to=bvanassche@acm.org \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=alim.akhtar@samsung.com \
    --cc=avri.altman@wdc.com \
    --cc=beanhuo@micron.com \
    --cc=junwoo80.lee@samsung.com \
    --cc=konrad.dybcio@oss.qualcomm.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=luca.weiss@fairphone.com \
    --cc=mani@kernel.org \
    --cc=manivannan.sadhasivam@linaro.org \
    --cc=martin.petersen@oracle.com \
    --cc=neil.armstrong@linaro.org \
    --cc=peter.wang@mediatek.com \
    --cc=quic_cang@quicinc.com \
    --cc=quic_nguyenb@quicinc.com \
    --cc=quic_nitirawa@quicinc.com \
    --cc=quic_rampraka@quicinc.com \
    --cc=quic_ziqichen@quicinc.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox