linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bart Van Assche <bvanassche@acm.org>
To: "Martin K . Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org, Jaegeuk Kim <jaegeuk@kernel.org>,
	Bart Van Assche <bvanassche@acm.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Stanley Chu <stanley.chu@mediatek.com>,
	Can Guo <cang@codeaurora.org>,
	Asutosh Das <asutoshd@codeaurora.org>,
	Avri Altman <avri.altman@wdc.com>,
	"James E.J. Bottomley" <jejb@linux.ibm.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Bean Huo <beanhuo@micron.com>,
	Kiwoong Kim <kwmad.kim@samsung.com>
Subject: [PATCH 11/21] ufs: Verify UIC locking requirements at runtime
Date: Thu,  1 Jul 2021 14:12:14 -0700	[thread overview]
Message-ID: <20210701211224.17070-12-bvanassche@acm.org> (raw)
In-Reply-To: <20210701211224.17070-1-bvanassche@acm.org>

Instead of documenting the locking requirements of the UIC code as comments,
use lockdep_assert_held() such that lockdep verifies the lockdep
requirements at runtime if lockdep is enabled.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Stanley Chu <stanley.chu@mediatek.com>
Cc: Can Guo <cang@codeaurora.org>
Cc: Asutosh Das <asutoshd@codeaurora.org>
Cc: Avri Altman <avri.altman@wdc.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/ufs/ufshcd.c | 16 +++++++++-------
 drivers/scsi/ufs/ufshcd.h |  2 +-
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 2e6aa614e3f5..1262f1a63e0b 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -2242,15 +2242,15 @@ static inline u8 ufshcd_get_upmcrs(struct ufs_hba *hba)
 }
 
 /**
- * ufshcd_dispatch_uic_cmd - Dispatch UIC commands to unipro layers
+ * ufshcd_dispatch_uic_cmd - Dispatch an UIC command to the Unipro layer
  * @hba: per adapter instance
  * @uic_cmd: UIC command
- *
- * Mutex must be held.
  */
 static inline void
 ufshcd_dispatch_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
 {
+	lockdep_assert_held(&hba->uic_cmd_mutex);
+
 	WARN_ON(hba->active_uic_cmd);
 
 	hba->active_uic_cmd = uic_cmd;
@@ -2268,11 +2268,10 @@ ufshcd_dispatch_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
 }
 
 /**
- * ufshcd_wait_for_uic_cmd - Wait complectioin of UIC command
+ * ufshcd_wait_for_uic_cmd - Wait for completion of an UIC command
  * @hba: per adapter instance
  * @uic_cmd: UIC command
  *
- * Must be called with mutex held.
  * Returns 0 only if success.
  */
 static int
@@ -2281,6 +2280,8 @@ ufshcd_wait_for_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
 	int ret;
 	unsigned long flags;
 
+	lockdep_assert_held(&hba->uic_cmd_mutex);
+
 	if (wait_for_completion_timeout(&uic_cmd->done,
 					msecs_to_jiffies(UIC_CMD_TIMEOUT))) {
 		ret = uic_cmd->argument2 & MASK_UIC_COMMAND_RESULT;
@@ -2310,14 +2311,15 @@ ufshcd_wait_for_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
  * @uic_cmd: UIC command
  * @completion: initialize the completion only if this is set to true
  *
- * Identical to ufshcd_send_uic_cmd() expect mutex. Must be called
- * with mutex held and host_lock locked.
  * Returns 0 only if success.
  */
 static int
 __ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd,
 		      bool completion)
 {
+	lockdep_assert_held(&hba->uic_cmd_mutex);
+	lockdep_assert_held(hba->host->host_lock);
+
 	if (!ufshcd_ready_for_uic_cmd(hba)) {
 		dev_err(hba->dev,
 			"Controller not ready to accept UIC commands\n");
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 79f6c261dfff..0dfb5e97ec0d 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -683,7 +683,7 @@ struct ufs_hba_monitor {
  * @priv: pointer to variant specific private data
  * @irq: Irq number of the controller
  * @active_uic_cmd: handle of active UIC command
- * @uic_cmd_mutex: mutex for uic command
+ * @uic_cmd_mutex: mutex for UIC command
  * @tmf_tag_set: TMF tag set.
  * @tmf_queue: Used to allocate TMF tags.
  * @pwr_done: completion for power mode change

  parent reply	other threads:[~2021-07-01 21:13 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-01 21:12 [PATCH 00/21] UFS patches for kernel v5.15 Bart Van Assche
2021-07-01 21:12 ` [PATCH 01/21] Fix the documentation of the scsi_execute() time parameter Bart Van Assche
2021-07-05  5:51   ` Avri Altman
2021-07-01 21:12 ` [PATCH 02/21] libsas: Only abort commands from inside the error handler Bart Van Assche
2021-07-03  2:32   ` Jason Yan
2021-07-04 23:52     ` Bart Van Assche
2021-07-05  7:16     ` Hannes Reinecke
2021-07-01 21:12 ` [PATCH 03/21] Clear host_eh_scheduled from inside the SCSI " Bart Van Assche
2021-07-01 21:12 ` [PATCH 04/21] libsas: Stop clearing host_eh_scheduled from the " Bart Van Assche
2021-07-01 21:12 ` [PATCH 05/21] ata: Stop clearing host_eh_scheduled from error handlers Bart Van Assche
2021-07-01 21:12 ` [PATCH 06/21] ufs: Reduce power management code duplication Bart Van Assche
2021-07-05  6:18   ` Avri Altman
2021-07-01 21:12 ` [PATCH 07/21] ufs: Only include power management code if necessary Bart Van Assche
2021-07-05  6:33   ` Avri Altman
2021-07-07 20:44     ` Bart Van Assche
2021-07-08  5:50   ` Avri Altman
2021-07-01 21:12 ` [PATCH 08/21] ufs: Rename the second ufshcd_probe_hba() argument Bart Van Assche
2021-07-01 21:12 ` [PATCH 09/21] ufs: Use DECLARE_COMPLETION_ONSTACK() where appropriate Bart Van Assche
2021-07-05  6:38   ` Avri Altman
2021-07-01 21:12 ` [PATCH 10/21] ufs: Remove ufshcd_valid_tag() Bart Van Assche
2021-07-05  6:46   ` Avri Altman
2021-07-05 18:08     ` Bart Van Assche
2021-07-05 19:01       ` Avri Altman
2021-07-05 19:02   ` Avri Altman
2021-07-01 21:12 ` Bart Van Assche [this message]
2021-07-05  6:52   ` [PATCH 11/21] ufs: Verify UIC locking requirements at runtime Avri Altman
2021-07-01 21:12 ` [PATCH 12/21] ufs: Improve static type checking for the host controller state Bart Van Assche
2021-07-01 21:12 ` [PATCH 13/21] ufs: Remove several wmb() calls Bart Van Assche
2021-07-01 22:26   ` Asutosh Das (asd)
2021-07-01 22:52     ` Bart Van Assche
2021-07-01 21:12 ` [PATCH 14/21] ufs: Inline ufshcd_outstanding_req_clear() Bart Van Assche
2021-07-05  7:03   ` Avri Altman
2021-07-01 21:12 ` [PATCH 15/21] ufs: Rename __ufshcd_transfer_req_compl() Bart Van Assche
2021-07-01 21:12 ` [PATCH 16/21] ufs: Fix the SCSI abort handler Bart Van Assche
2021-07-01 21:12 ` [PATCH 17/21] ufs: Fix a race in the completion path Bart Van Assche
2021-07-01 21:12 ` [PATCH 18/21] ufs: Use the doorbell register instead of the UTRLCNR register Bart Van Assche
2021-07-01 21:12 ` [PATCH 19/21] ufs: Request sense data asynchronously Bart Van Assche
2021-07-01 21:12 ` [PATCH 20/21] ufs: Synchronize SCSI and UFS error handling Bart Van Assche
2021-07-01 21:12 ` [PATCH 21/21] ufs: Retry aborted SCSI commands instead of completing these successfully Bart Van Assche

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=20210701211224.17070-12-bvanassche@acm.org \
    --to=bvanassche@acm.org \
    --cc=adrian.hunter@intel.com \
    --cc=asutoshd@codeaurora.org \
    --cc=avri.altman@wdc.com \
    --cc=beanhuo@micron.com \
    --cc=cang@codeaurora.org \
    --cc=jaegeuk@kernel.org \
    --cc=jejb@linux.ibm.com \
    --cc=kwmad.kim@samsung.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=matthias.bgg@gmail.com \
    --cc=stanley.chu@mediatek.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).