All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Garry <john.garry@huawei.com>
To: <jejb@linux.ibm.com>, <martin.petersen@oracle.com>
Cc: <linux-scsi@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linuxarm@huawei.com>, Qi Liu <liuqi115@huawei.com>,
	John Garry <john.garry@huawei.com>
Subject: [PATCH 5/8] scsi: hisi_sas: Prevent parallel controller reset and control phy command
Date: Wed, 15 Dec 2021 22:37:38 +0800	[thread overview]
Message-ID: <1639579061-179473-6-git-send-email-john.garry@huawei.com> (raw)
In-Reply-To: <1639579061-179473-1-git-send-email-john.garry@huawei.com>

From: Qi Liu <liuqi115@huawei.com>

A user may issue a control phy command from sysfs at any time, even if the
controller is resetting.

If a phy is disabled by hardreset/linkreset command before calling
get_phys_state() in the reset path, the saved phy state may be incorrect.

To avoid incorrectly recording the phy state, use hisi_hba.sem to ensure
that the controller reset may not run at the same time as when the phy
control function is running.

Signed-off-by: Qi Liu <liuqi115@huawei.com>
Signed-off-by: John Garry <john.garry@huawei.com>
---
 drivers/scsi/hisi_sas/hisi_sas_main.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c
index 8df1fd680eac..977911580d8f 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_main.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
@@ -1148,6 +1148,7 @@ static int hisi_sas_control_phy(struct asd_sas_phy *sas_phy, enum phy_func func,
 	u8 sts = phy->phy_attached;
 	int ret = 0;
 
+	down(&hisi_hba->sem);
 	phy->reset_completion = &completion;
 
 	switch (func) {
@@ -1191,6 +1192,7 @@ static int hisi_sas_control_phy(struct asd_sas_phy *sas_phy, enum phy_func func,
 out:
 	phy->reset_completion = NULL;
 
+	up(&hisi_hba->sem);
 	return ret;
 }
 
-- 
2.26.2


  parent reply	other threads:[~2021-12-15 14:43 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-15 14:37 [PATCH 0/8] hisi_sas: Some misc patches John Garry
2021-12-15 14:37 ` [PATCH 1/8] scsi: hisi_sas: Start delivery hisi_sas_task_exec() directly John Garry
2021-12-15 14:37 ` [PATCH 2/8] scsi: hisi_sas: Make internal abort have no task proto John Garry
2021-12-15 14:37 ` [PATCH 3/8] scsi: hisi_sas: Pass abort structure for internal abort John Garry
2021-12-15 14:37 ` [PATCH 4/8] scsi: hisi_sas: Factor out task prep and delivery code John Garry
2021-12-15 14:37 ` John Garry [this message]
2021-12-15 14:37 ` [PATCH 6/8] scsi: hisi_sas: Prevent parallel FLR and controller reset John Garry
2021-12-15 14:37 ` [PATCH 7/8] scsi: hisi_sas: Fix phyup timeout on FPGA John Garry
2021-12-15 14:37 ` [PATCH 8/8] scsi: libsas: Decode SAM status and host byte codes John Garry
2021-12-17  4:00 ` [PATCH 0/8] hisi_sas: Some misc patches Martin K. Petersen
2021-12-23  5:09 ` 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=1639579061-179473-6-git-send-email-john.garry@huawei.com \
    --to=john.garry@huawei.com \
    --cc=jejb@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=liuqi115@huawei.com \
    --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 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.