提交 b6645112 编写于 作者: J Jaegeuk Kim 提交者: Martin K. Petersen

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.orgReviewed-by: NCan Guo <cang@codeaurora.org>
Signed-off-by: NJaegeuk Kim <jaegeuk@google.com>
Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
上级 fd62de11
...@@ -1818,19 +1818,19 @@ static ssize_t ufshcd_clkgate_enable_store(struct device *dev, ...@@ -1818,19 +1818,19 @@ static ssize_t ufshcd_clkgate_enable_store(struct device *dev,
return -EINVAL; return -EINVAL;
value = !!value; value = !!value;
spin_lock_irqsave(hba->host->host_lock, flags);
if (value == hba->clk_gating.is_enabled) if (value == hba->clk_gating.is_enabled)
goto out; goto out;
if (value) { if (value)
ufshcd_release(hba); __ufshcd_release(hba);
} else { else
spin_lock_irqsave(hba->host->host_lock, flags);
hba->clk_gating.active_reqs++; hba->clk_gating.active_reqs++;
spin_unlock_irqrestore(hba->host->host_lock, flags);
}
hba->clk_gating.is_enabled = value; hba->clk_gating.is_enabled = value;
out: out:
spin_unlock_irqrestore(hba->host->host_lock, flags);
return count; return count;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册