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>
This commit is contained in:
Родитель
4728ab4a8e
Коммит
35c7d874f5
|
@ -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");
|
||||
|
|
|
@ -708,7 +708,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
|
||||
|
|
Загрузка…
Ссылка в новой задаче