mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
UPSTREAM: scsi: ufs: Verify UIC locking requirements at runtime
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.
Link: https://lore.kernel.org/r/20210722033439.26550-8-bvanassche@acm.org
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>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Reviewed-by: Daejun Park <daejun7.park@samsung.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit 35c7d874f5)
Bug: 204438323
Signed-off-by: Bart Van Assche <bvanassche@google.com>
Change-Id: Ifdc3d90bcdcfa43cda2d286295521666ccef4795
This commit is contained in:
committed by
Bart Van Assche
parent
73d9678ae5
commit
506a024be7
@@ -2263,15 +2263,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;
|
||||
@@ -2289,11 +2289,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
|
||||
@@ -2302,6 +2301,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;
|
||||
@@ -2331,14 +2332,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");
|
||||
|
||||
@@ -756,7 +756,7 @@ struct ufs_hba_monitor {
|
||||
* @sg_entry_size: size of struct ufshcd_sg_entry (may include variant fields)
|
||||
* @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
|
||||
|
||||
Reference in New Issue
Block a user