public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <bvanassche@acm.org>
To: "Martin K . Petersen" <martin.petersen@oracle.com>
Cc: Jaegeuk Kim <jaegeuk@kernel.org>,
	linux-scsi@vger.kernel.org,
	Adrian Hunter <adrian.hunter@intel.com>,
	Bart Van Assche <bvanassche@acm.org>,
	"James E.J. Bottomley" <jejb@linux.ibm.com>,
	Bean Huo <beanhuo@micron.com>, Avri Altman <avri.altman@wdc.com>,
	Jinyoung Choi <j-young.choi@samsung.com>
Subject: [PATCH v4 09/10] scsi: ufs: Introduce the function ufshcd_execute_start_stop()
Date: Tue, 18 Oct 2022 13:29:57 -0700	[thread overview]
Message-ID: <20221018202958.1902564-10-bvanassche@acm.org> (raw)
In-Reply-To: <20221018202958.1902564-1-bvanassche@acm.org>

Open-code scsi_execute() because a later patch will modify scmd->flags
and because scsi_execute() does not support setting scmd->flags. No
functionality is changed.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/ufs/core/ufshcd.c | 39 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 2a32bcc93d2e..c5ccc7ba583b 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -8729,6 +8729,39 @@ static void ufshcd_hba_exit(struct ufs_hba *hba)
 	}
 }
 
+static int ufshcd_execute_start_stop(struct scsi_device *sdev,
+				     enum ufs_dev_pwr_mode pwr_mode,
+				     struct scsi_sense_hdr *sshdr)
+{
+	unsigned char cdb[6] = { START_STOP, 0, 0, 0, pwr_mode << 4, 0 };
+	struct request *req;
+	struct scsi_cmnd *scmd;
+	int ret;
+
+	req = scsi_alloc_request(sdev->request_queue, REQ_OP_DRV_IN,
+				 BLK_MQ_REQ_PM);
+	if (IS_ERR(req))
+		return PTR_ERR(req);
+
+	scmd = blk_mq_rq_to_pdu(req);
+	scmd->cmd_len = COMMAND_SIZE(cdb[0]);
+	memcpy(scmd->cmnd, cdb, scmd->cmd_len);
+	scmd->allowed = 0/*retries*/;
+	req->timeout = 1 * HZ;
+	req->rq_flags |= RQF_PM | RQF_QUIET;
+
+	blk_execute_rq(req, /*at_head=*/true);
+
+	if (sshdr)
+		scsi_normalize_sense(scmd->sense_buffer, scmd->sense_len,
+				     sshdr);
+	ret = scmd->result;
+
+	blk_mq_free_request(req);
+
+	return ret;
+}
+
 /**
  * ufshcd_set_dev_pwr_mode - sends START STOP UNIT command to set device
  *			     power mode
@@ -8741,7 +8774,6 @@ static void ufshcd_hba_exit(struct ufs_hba *hba)
 static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
 				     enum ufs_dev_pwr_mode pwr_mode)
 {
-	unsigned char cmd[6] = { START_STOP };
 	struct scsi_sense_hdr sshdr;
 	struct scsi_device *sdp;
 	unsigned long flags;
@@ -8766,16 +8798,13 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
 	 */
 	hba->host->eh_noresume = 1;
 
-	cmd[4] = pwr_mode << 4;
-
 	/*
 	 * Current function would be generally called from the power management
 	 * callbacks hence set the RQF_PM flag so that it doesn't resume the
 	 * already suspended childs.
 	 */
 	for (retries = 3; retries > 0; --retries) {
-		ret = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr,
-				   HZ, 0, 0, RQF_PM, NULL);
+		ret = ufshcd_execute_start_stop(sdp, pwr_mode, &sshdr);
 		/*
 		 * scsi_execute() only returns a negative value if the request
 		 * queue is dying.

  parent reply	other threads:[~2022-10-18 20:31 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-18 20:29 [PATCH v4 00/10] Fix a deadlock in the UFS driver Bart Van Assche
2022-10-18 20:29 ` [PATCH v4 01/10] scsi: core: Fix a race between scsi_done() and scsi_timeout() Bart Van Assche
2022-10-18 20:29 ` [PATCH v4 02/10] scsi: core: Change the return type of .eh_timed_out() Bart Van Assche
2022-10-20 17:22   ` Mike Christie
2022-10-18 20:29 ` [PATCH v4 03/10] scsi: core: Support failing requests while recovering Bart Van Assche
2022-10-19 19:52   ` Mike Christie
2022-10-19 21:11     ` Bart Van Assche
2022-10-20 17:20       ` Mike Christie
2022-10-18 20:29 ` [PATCH v4 04/10] scsi: ufs: Remove an outdated comment Bart Van Assche
2022-10-18 20:29 ` [PATCH v4 05/10] scsi: ufs: Use 'else' in ufshcd_set_dev_pwr_mode() Bart Van Assche
2022-10-18 20:29 ` [PATCH v4 06/10] scsi: ufs: Reduce the START STOP UNIT timeout Bart Van Assche
2022-10-18 20:29 ` [PATCH v4 07/10] scsi: ufs: Try harder to change the power mode Bart Van Assche
2022-10-18 20:29 ` [PATCH v4 08/10] scsi: ufs: Track system suspend / resume activity Bart Van Assche
2022-10-18 20:29 ` Bart Van Assche [this message]
2022-10-19 19:57   ` [PATCH v4 09/10] scsi: ufs: Introduce the function ufshcd_execute_start_stop() Mike Christie
2022-10-19 21:13     ` Bart Van Assche
2022-10-20 17:21       ` Mike Christie
2022-10-18 20:29 ` [PATCH v4 10/10] scsi: ufs: Fix a deadlock between PM and the SCSI error handler Bart Van Assche
2022-10-22  3:27 ` [PATCH v4 00/10] Fix a deadlock in the UFS driver Martin K. Petersen
2022-10-23  6:16   ` Avri Altman
2022-10-24 23:27     ` Bart Van Assche
2022-10-27  2:58 ` 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=20221018202958.1902564-10-bvanassche@acm.org \
    --to=bvanassche@acm.org \
    --cc=adrian.hunter@intel.com \
    --cc=avri.altman@wdc.com \
    --cc=beanhuo@micron.com \
    --cc=j-young.choi@samsung.com \
    --cc=jaegeuk@kernel.org \
    --cc=jejb@linux.ibm.com \
    --cc=linux-scsi@vger.kernel.org \
    --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