From: Can Guo <cang@codeaurora.org>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: Bart Van Assche <bvanassche@acm.org>,
asutoshd@codeaurora.org, nguyenb@codeaurora.org,
hongwus@codeaurora.org, ziqichen@codeaurora.org,
rnayak@codeaurora.org, linux-scsi@vger.kernel.org,
kernel-team@android.com, saravanak@google.com,
salyzyn@google.com, Alim Akhtar <alim.akhtar@samsung.com>,
Avri Altman <avri.altman@wdc.com>,
"James E.J. Bottomley" <jejb@linux.ibm.com>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
Stanley Chu <stanley.chu@mediatek.com>,
Bean Huo <beanhuo@micron.com>,
open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 1/2] scsi: ufs: Fix a possible NULL pointer issue
Date: Sat, 16 Jan 2021 21:27:34 +0800 [thread overview]
Message-ID: <154d7c439cc8bca807273f4a40852054@codeaurora.org> (raw)
In-Reply-To: <8dea503d-9ab7-c003-9ade-3470def21764@intel.com>
On 2021-01-15 21:07, Adrian Hunter wrote:
> On 2/01/21 3:10 pm, Can Guo wrote:
>> On 2021-01-02 20:29, Can Guo wrote:
>>> On 2021-01-02 00:05, Bart Van Assche wrote:
>>>> On 12/31/20 9:44 PM, Can Guo wrote:
>>>>> During system resume/suspend, hba could be NULL. In this case, do
>>>>> not touch
>>>>> eh_sem.
>>>>>
>>>>> Fixes: 88a92d6ae4fe ("scsi: ufs: Serialize eh_work with system PM
>>>>> events
>>>>> and async scan")
>>>>>
>>>>> Signed-off-by: Can Guo <cang@codeaurora.org>
>>>>> ---
>>>>> drivers/scsi/ufs/ufshcd.c | 9 +++++----
>>>>> 1 file changed, 5 insertions(+), 4 deletions(-)
>>>>>
>>>>> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
>>>>> index e221add..34e2541 100644
>>>>> --- a/drivers/scsi/ufs/ufshcd.c
>>>>> +++ b/drivers/scsi/ufs/ufshcd.c
>>>>> @@ -8896,8 +8896,11 @@ int ufshcd_system_suspend(struct ufs_hba
>>>>> *hba)
>>>>> int ret = 0;
>>>>> ktime_t start = ktime_get();
>>>>>
>>>>> + if (!hba)
>>>>> + return 0;
>>>>> +
>>>>> down(&hba->eh_sem);
>>>>> - if (!hba || !hba->is_powered)
>>>>> + if (!hba->is_powered)
>>>>> return 0;
>>>>>
>>>>> if ((ufs_get_pm_lvl_to_dev_pwr_mode(hba->spm_lvl) ==
>>>>> @@ -8945,10 +8948,8 @@ int ufshcd_system_resume(struct ufs_hba
>>>>> *hba)
>>>>> int ret = 0;
>>>>> ktime_t start = ktime_get();
>>>>>
>>>>> - if (!hba) {
>>>>> - up(&hba->eh_sem);
>>>>> + if (!hba)
>>>>> return -EINVAL;
>>>>> - }
>>>>>
>>>>> if (!hba->is_powered || pm_runtime_suspended(hba->dev))
>>>>> /*
>>>>
>>>> Hi Can,
>>>>
>>>> How can ufshcd_system_suspend() or ufshcd_system_resume() be called
>>>> with a
>>>> NULL argument? In ufshcd_pci_probe() I see that pci_set_drvdata() is
>>>> called
>>>> before pm_runtime_allow(). ufshcd_pci_remove() calls
>>>> pm_runtime_forbid().
>>>>
>>>> Thanks,
>>>>
>>>> Bart.
>>>
>>> Hi Bart,
>>>
>>> You are right about ufshcd_RUNTIME_suspend/resume() -
>>> platform_set_drvdata()
>>> is called before pm_runtime_enable(), so runtime suspend/resume
>>> cannot happen
>>> before pm_runtime_enable() is called. We can remove the sanity checks
>>> of
>>> !hba there, they are outdated.
>>
>> Add more history here - before Stanley's change (see below),
>> platform_set_drvdata()
>> is called AFTER pm_runtime_enable(), which was why we needed sanity
>> checks
>> of !hba.
>> But now the sanity checks are unnecessary in
>> ufshcd_RUNTIME_suspend/resume(), so
>> feel free to remove them.
>>
>> But still, things are a bit different for
>> ufshcd_SYSTEM_suspend/resume(), we
>> need
>> the sanity checks of !hba there if my understanding is correct.
>>
>> commit 24e2e7a19f7e4b83d0d5189040d997bce3596473
>> Author: Stanley Chu <stanley.chu@mediatek.com>
>> Date: Wed Jun 12 23:19:05 2019 +0800
>>
>> scsi: ufs: Avoid runtime suspend possibly being blocked forever
>>
>> Thanks,
>> Can Guo.
>>
>>>
>>> But for ufshcd_SYSTEM_suspend/resume() callbacks (not runtime ones),
>>> my
>>> understanding is that system suspend/resume may happen after probe
>>> (vendor
>>> driver probe calls ufshcd_pltfrm_init()) starts but before
>>> platform_set_drvdata()
>>> is called, in this case hba is NULL.
>>>
>>> int ufshcd_pltfrm_init(struct platform_device *pdev,
>>> const struct ufs_hba_variant_ops *vops)
>>> {
>>> ...
>>> platform_set_drvdata(pdev, hba);
>>>
>>> pm_runtime_set_active(&pdev->dev);
>>> pm_runtime_enable(&pdev->dev);
>>> }
>
> Hi Can
>
> I expect probe and system suspend are synchronized e.g. by
> device_lock(), so
> hba would not be NULL. Is there any example of it being NULL in system
> suspend?
>
> Regards
> Adrian
Hi Adrian,
Thanks for the remind - I didn't notice they are protected by
device_lock().
You are right, hba cannot be NULL in current code... Maybe if (!hba) was
there just for a sanity check. I will make a change to remove these
checks.
Thanks,
Can Guo.
next prev parent reply other threads:[~2021-01-16 17:28 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-01 5:44 [PATCH v2 0/2] Synchronize user layer access with system PM ops and error handling Can Guo
2021-01-01 5:44 ` [PATCH v2 1/2] scsi: ufs: Fix a possible NULL pointer issue Can Guo
2021-01-01 16:05 ` Bart Van Assche
2021-01-02 12:29 ` Can Guo
2021-01-02 13:10 ` Can Guo
2021-01-15 13:07 ` Adrian Hunter
2021-01-16 13:27 ` Can Guo [this message]
2021-01-01 5:44 ` [PATCH v2 2/2] scsi: ufs: Protect PM ops and err_handler from user access through sysfs Can Guo
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=154d7c439cc8bca807273f4a40852054@codeaurora.org \
--to=cang@codeaurora.org \
--cc=adrian.hunter@intel.com \
--cc=alim.akhtar@samsung.com \
--cc=asutoshd@codeaurora.org \
--cc=avri.altman@wdc.com \
--cc=beanhuo@micron.com \
--cc=bvanassche@acm.org \
--cc=hongwus@codeaurora.org \
--cc=jejb@linux.ibm.com \
--cc=kernel-team@android.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=nguyenb@codeaurora.org \
--cc=rnayak@codeaurora.org \
--cc=salyzyn@google.com \
--cc=saravanak@google.com \
--cc=stanley.chu@mediatek.com \
--cc=ziqichen@codeaurora.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.