Messages in this thread Patch in this message | | | Subject | RE: [PATCH v2 1/5] scsi: ufs-mediatek: Fix imprecise waiting time for ref-clk control | From | Stanley Chu <> | Date | Sun, 31 May 2020 21:45:06 +0800 |
| |
Hi Avri,
On Sun, 2020-05-31 at 07:10 +0000, Avri Altman wrote: > > > > Currently ref-clk control timeout is implemented by Jiffies. However > > jiffies is not accurate enough thus "false timeout" may happen. > > > > Use more accurate delay mechanism instead, for example, ktime. > > > > Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> > > Reviewed-by: Andy Teng <andy.teng@mediatek.com> > Reviewed-by: Avri Altman <avri.altman@wdc.com> >
Thanks for your review.
> > > > /* Wait for ack */ > > - timeout = jiffies + msecs_to_jiffies(REFCLK_REQ_TIMEOUT_MS); > > + timeout = ktime_add_us(ktime_get(), REFCLK_REQ_TIMEOUT_US); > > do { > > + time_checked = ktime_get(); > > value = ufshcd_readl(hba, REG_UFS_REFCLK_CTRL); > > > > /* Wait until ack bit equals to req bit */ > > @@ -144,7 +145,7 @@ static int ufs_mtk_setup_ref_clk(struct ufs_hba *hba, > > bool on) > > goto out; > > > > usleep_range(100, 200); > > - } while (time_before(jiffies, timeout)); > > + } while (ktime_before(time_checked, timeout)); > Nit: you could get rid of time_checked if you would use ktime_compare(ktime_get(), timeout) > 0 > > Thanks, > Avri
If this context is preempted and scheduled out between ufshcd_readl() and ktime_compare(ktime_get(), timeout), then the ktime_get() may get a "timed-out" time even though the last ufshcd_readl() is actually executed before the "timed-out" time. In this case, false alarm will show up. Using "time_checked" here could solve above issue.
Thanks, Stanley Chu
| |