scsi: ufs: core: Remove redundant host_lock calls around UTMRLDBR
There is no need to serialize single read/write calls to the host controller registers. Remove the redundant host_lock calls that protect access to the task management doorbell register: UTMRLDBR. Signed-off-by: Avri Altman <avri.altman@wdc.com> Link: https://lore.kernel.org/r/20241024075033.562562-2-avri.altman@wdc.com Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
2c73fb138d
commit
2b314e182c
@@ -1233,11 +1233,13 @@ static bool ufshcd_is_devfreq_scaling_required(struct ufs_hba *hba,
|
||||
static u32 ufshcd_pending_cmds(struct ufs_hba *hba)
|
||||
{
|
||||
const struct scsi_device *sdev;
|
||||
unsigned long flags;
|
||||
u32 pending = 0;
|
||||
|
||||
lockdep_assert_held(hba->host->host_lock);
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
__shost_for_each_device(sdev, hba->host)
|
||||
pending += sbitmap_weight(&sdev->budget_map);
|
||||
spin_unlock_irqrestore(hba->host->host_lock, flags);
|
||||
|
||||
return pending;
|
||||
}
|
||||
@@ -1251,7 +1253,6 @@ static u32 ufshcd_pending_cmds(struct ufs_hba *hba)
|
||||
static int ufshcd_wait_for_doorbell_clr(struct ufs_hba *hba,
|
||||
u64 wait_timeout_us)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret = 0;
|
||||
u32 tm_doorbell;
|
||||
u32 tr_pending;
|
||||
@@ -1259,7 +1260,6 @@ static int ufshcd_wait_for_doorbell_clr(struct ufs_hba *hba,
|
||||
ktime_t start;
|
||||
|
||||
ufshcd_hold(hba);
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
/*
|
||||
* Wait for all the outstanding tasks/transfer requests.
|
||||
* Verify by checking the doorbell registers are clear.
|
||||
@@ -1280,7 +1280,6 @@ static int ufshcd_wait_for_doorbell_clr(struct ufs_hba *hba,
|
||||
break;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(hba->host->host_lock, flags);
|
||||
io_schedule_timeout(msecs_to_jiffies(20));
|
||||
if (ktime_to_us(ktime_sub(ktime_get(), start)) >
|
||||
wait_timeout_us) {
|
||||
@@ -1292,7 +1291,6 @@ static int ufshcd_wait_for_doorbell_clr(struct ufs_hba *hba,
|
||||
*/
|
||||
do_last_check = true;
|
||||
}
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
} while (tm_doorbell || tr_pending);
|
||||
|
||||
if (timeout) {
|
||||
@@ -1302,7 +1300,6 @@ static int ufshcd_wait_for_doorbell_clr(struct ufs_hba *hba,
|
||||
ret = -EBUSY;
|
||||
}
|
||||
out:
|
||||
spin_unlock_irqrestore(hba->host->host_lock, flags);
|
||||
ufshcd_release(hba);
|
||||
return ret;
|
||||
}
|
||||
@@ -7048,12 +7045,13 @@ static int __ufshcd_issue_tm_cmd(struct ufs_hba *hba,
|
||||
memcpy(hba->utmrdl_base_addr + task_tag, treq, sizeof(*treq));
|
||||
ufshcd_vops_setup_task_mgmt(hba, task_tag, tm_function);
|
||||
|
||||
/* send command to the controller */
|
||||
__set_bit(task_tag, &hba->outstanding_tasks);
|
||||
ufshcd_writel(hba, 1 << task_tag, REG_UTP_TASK_REQ_DOOR_BELL);
|
||||
|
||||
spin_unlock_irqrestore(host->host_lock, flags);
|
||||
|
||||
/* send command to the controller */
|
||||
ufshcd_writel(hba, 1 << task_tag, REG_UTP_TASK_REQ_DOOR_BELL);
|
||||
|
||||
ufshcd_add_tm_upiu_trace(hba, task_tag, UFS_TM_SEND);
|
||||
|
||||
/* wait until the task management command is completed */
|
||||
|
||||
Reference in New Issue
Block a user