mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-15 23:25:07 +00:00
scsi: ufs: Atomic update for clkgating_enable
While running a stress test which enables/disables clkgating, we occasionally hit device timeout. This patch avoids a subtle race condition to address it. Link: https://lore.kernel.org/r/20201117165839.1643377-3-jaegeuk@kernel.org Reviewed-by: Can Guo <cang@codeaurora.org> Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
fd62de114f
commit
b664511297
1 changed files with 6 additions and 6 deletions
|
@ -1818,19 +1818,19 @@ static ssize_t ufshcd_clkgate_enable_store(struct device *dev,
|
|||
return -EINVAL;
|
||||
|
||||
value = !!value;
|
||||
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
if (value == hba->clk_gating.is_enabled)
|
||||
goto out;
|
||||
|
||||
if (value) {
|
||||
ufshcd_release(hba);
|
||||
} else {
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
if (value)
|
||||
__ufshcd_release(hba);
|
||||
else
|
||||
hba->clk_gating.active_reqs++;
|
||||
spin_unlock_irqrestore(hba->host->host_lock, flags);
|
||||
}
|
||||
|
||||
hba->clk_gating.is_enabled = value;
|
||||
out:
|
||||
spin_unlock_irqrestore(hba->host->host_lock, flags);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue