From: Nathan Chancellor <nathan@kernel.org>
To: chenxiang <chenxiang66@hisilicon.com>
Cc: jejb@linux.ibm.com, martin.petersen@oracle.com,
linux-scsi@vger.kernel.org, linuxarm@huawei.com,
john.garry@huawei.com, llvm@lists.linux.dev
Subject: Re: [PATCH v2 05/15] scsi: hisi_sas: Fix some issues related to asd_sas_port->phy_list
Date: Mon, 27 Dec 2021 10:25:42 -0700 [thread overview]
Message-ID: <Ycn3FoW9eOZNFMiL@archlinux-ax161> (raw)
In-Reply-To: <1639999298-244569-6-git-send-email-chenxiang66@hisilicon.com>
Hi Xiang,
On Mon, Dec 20, 2021 at 07:21:28PM +0800, chenxiang wrote:
> From: Xiang Chen <chenxiang66@hisilicon.com>
>
> Most places that use asd_sas_port->phy_list are protected by spinlock
> asd_sas_port->phy_list_lock, but there are some places which lack of it
> in hisi_sas driver, so add it in function hisi_sas_refresh_port_id() when
> accessing asd_sas_port->phy_list. But it has a risk that list mutates while
> dropping the lock at the same time in function
> hisi_sas_send_ata_reset_each_phy(), so read asd_sas_port->phy_mask
> instead of accessing asd_sas_port->phy_list to avoid the risk.
>
> Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
> Acked-by: John Garry <john.garry@huawei.com>
> ---
> drivers/scsi/hisi_sas/hisi_sas_main.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c
> index ad64ccd41420..051092e294f7 100644
> --- a/drivers/scsi/hisi_sas/hisi_sas_main.c
> +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
> @@ -1428,11 +1428,13 @@ static void hisi_sas_refresh_port_id(struct hisi_hba *hisi_hba)
> sas_port = device->port;
> port = to_hisi_sas_port(sas_port);
>
> + spin_lock(&sas_port->phy_list_lock);
> list_for_each_entry(sas_phy, &sas_port->phy_list, port_phy_el)
> if (state & BIT(sas_phy->id)) {
> phy = sas_phy->lldd_phy;
> break;
> }
> + spin_unlock(&sas_port->phy_list_lock);
>
> if (phy) {
> port->id = phy->port_id;
> @@ -1509,22 +1511,25 @@ static void hisi_sas_send_ata_reset_each_phy(struct hisi_hba *hisi_hba,
> struct ata_link *link;
> u8 fis[20] = {0};
> u32 state;
> + int i;
>
> state = hisi_hba->hw->get_phys_state(hisi_hba);
> - list_for_each_entry(sas_phy, &sas_port->phy_list, port_phy_el) {
> + for (i = 0; i < hisi_hba->n_phy; i++) {
> if (!(state & BIT(sas_phy->id)))
> continue;
> + if (!(sas_port->phy_mask & BIT(i)))
> + continue;
>
> ata_for_each_link(link, ap, EDGE) {
> int pmp = sata_srst_pmp(link);
>
> - tmf_task.phy_id = sas_phy->id;
> + tmf_task.phy_id = i;
> hisi_sas_fill_ata_reset_cmd(link->device, 1, pmp, fis);
> rc = hisi_sas_exec_internal_tmf_task(device, fis, s,
> &tmf_task);
> if (rc != TMF_RESP_FUNC_COMPLETE) {
> dev_err(dev, "phy%d ata reset failed rc=%d\n",
> - sas_phy->id, rc);
> + i, rc);
> break;
> }
> }
> --
> 2.33.0
>
>
Please ignore this if it was already reported, I do not see any reports
of it on lore.kernel.org nor a commit fixing it in Martin's tree.
This commit as commit 29e2bac87421 ("scsi: hisi_sas: Fix some issues
related to asd_sas_port->phy_list") in -next causes the following clang
warning, which will break the build under -Werror:
drivers/scsi/hisi_sas/hisi_sas_main.c:1536:21: error: variable 'sas_phy' is uninitialized when used here [-Werror,-Wuninitialized]
if (!(state & BIT(sas_phy->id)))
^~~~~~~
./include/vdso/bits.h:7:30: note: expanded from macro 'BIT'
#define BIT(nr) (UL(1) << (nr))
^~
drivers/scsi/hisi_sas/hisi_sas_main.c:1528:29: note: initialize the variable 'sas_phy' to silence this warning
struct asd_sas_phy *sas_phy;
^
= NULL
1 error generated.
It seems like this variable is entirely unused now, should it be removed
along with this check?
Cheers,
Nathan
next prev parent reply other threads:[~2021-12-27 17:25 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-20 11:21 [PATCH v2 00/15] Add runtime PM support for libsas chenxiang
2021-12-20 11:21 ` [PATCH v2 01/15] libsas: Don't always drain event workqueue for HA resume chenxiang
2021-12-20 11:21 ` [PATCH v2 02/15] Revert "scsi: hisi_sas: Filter out new PHY up events during suspend" chenxiang
2021-12-20 11:21 ` [PATCH v2 03/15] scsi/block PM: Always set request queue runtime active in blk_post_runtime_resume() chenxiang
2021-12-20 11:21 ` [PATCH v2 04/15] scsi: libsas: Add spin_lock/unlock() to protect asd_sas_port->phy_list chenxiang
2021-12-20 11:21 ` [PATCH v2 05/15] scsi: hisi_sas: Fix some issues related to asd_sas_port->phy_list chenxiang
2021-12-27 17:25 ` Nathan Chancellor [this message]
2021-12-28 2:03 ` chenxiang (M)
2022-01-04 10:02 ` John Garry
2022-01-04 11:38 ` chenxiang (M)
2021-12-20 11:21 ` [PATCH v2 06/15] scsi: mvsas: Add spin_lock/unlock() to protect asd_sas_port->phy_list chenxiang
2021-12-20 11:21 ` [PATCH v2 07/15] scsi: libsas: Insert PORTE_BROADCAST_RCVD event for resuming host chenxiang
2021-12-20 11:21 ` [PATCH v2 08/15] scsi: hisi_sas: Add more logs for runtime suspend/resume chenxiang
2021-12-20 11:21 ` [PATCH v2 09/15] scsi: libsas: Resume host while sending SMP IOs chenxiang
2021-12-20 11:21 ` [PATCH v2 10/15] scsi: libsas: Add flag SAS_HA_RESUMING chenxiang
2021-12-20 11:21 ` [PATCH v2 11/15] scsi: libsas: Refactor sas_queue_deferred_work() chenxiang
2021-12-20 11:21 ` [PATCH v2 12/15] scsi: libsas: Defer works of new phys during suspend chenxiang
2021-12-20 11:21 ` [PATCH v2 13/15] scsi: hisi_sas: Keep controller active between ISR of phyup and the event being processed chenxiang
2021-12-20 11:21 ` [PATCH v2 14/15] scsi: libsas: Keep host active while processing events chenxiang
2021-12-20 11:21 ` [PATCH v2 15/15] scsi: hisi_sas: Use autosuspend for the host controller chenxiang
2021-12-23 4:39 ` [PATCH v2 00/15] Add runtime PM support for libsas Martin K. Petersen
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=Ycn3FoW9eOZNFMiL@archlinux-ax161 \
--to=nathan@kernel.org \
--cc=chenxiang66@hisilicon.com \
--cc=jejb@linux.ibm.com \
--cc=john.garry@huawei.com \
--cc=linux-scsi@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=llvm@lists.linux.dev \
--cc=martin.petersen@oracle.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;
as well as URLs for NNTP newsgroup(s).