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.
next prev 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