All of lore.kernel.org
 help / color / mirror / Atom feed
From: jaegeuk@kernel.org
To: Can Guo <cang@codeaurora.org>
Cc: linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
	kernel-team@android.com, Alim Akhtar <alim.akhtar@samsung.com>,
	Avri Altman <avri.altman@wdc.com>
Subject: Re: [PATCH v2] scsi: ufs: fix clkgating on/off correctly
Date: Tue, 20 Oct 2020 12:17:16 -0700	[thread overview]
Message-ID: <20201020191716.GA1726050@google.com> (raw)
In-Reply-To: <5a59c4c4ec0959223fe0e879f2dd9d91@codeaurora.org>

On 10/20, Can Guo wrote:
> On 2020-10-17 05:18, jaegeuk@kernel.org wrote:
> > The below call stack prevents clk_gating at every IO completion.
> > We can remove the condition, ufshcd_any_tag_in_use(), since
> > clkgating_work
> > will check it again.
> > 
> > ufshcd_complete_requests(struct ufs_hba *hba)
> >   ufshcd_transfer_req_compl()
> >     __ufshcd_transfer_req_compl()
> >       __ufshcd_release(hba)
> >         if (ufshcd_any_tag_in_use() == 1)
> >            return;
> >   ufshcd_tmc_handler(hba);
> >     blk_mq_tagset_busy_iter();
> > 
> > In addition, we have to avoid gate_work, if it was disabled.
> > 
> > Cc: Alim Akhtar <alim.akhtar@samsung.com>
> > Cc: Avri Altman <avri.altman@wdc.com>
> > Cc: Can Guo <cang@codeaurora.org>
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> > 
> > Change log from v1:
> >  - change the patch subject
> >  - fix clkgate.is_enable to work
> > 
> >  drivers/scsi/ufs/ufshcd.c | 5 +++--
> >  drivers/scsi/ufs/ufshcd.h | 5 +++++
> >  2 files changed, 8 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> > index a2db8182663d..75e8a76f20c7 100644
> > --- a/drivers/scsi/ufs/ufshcd.c
> > +++ b/drivers/scsi/ufs/ufshcd.c
> > @@ -1729,9 +1729,10 @@ static void __ufshcd_release(struct ufs_hba *hba)
> > 
> >  	if (hba->clk_gating.active_reqs || hba->clk_gating.is_suspended
> >  		|| hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL
> > -		|| ufshcd_any_tag_in_use(hba) || hba->outstanding_tasks
> > +		|| hba->outstanding_tasks
> >  		|| hba->active_uic_cmd || hba->uic_async_done
> > -		|| ufshcd_eh_in_progress(hba))
> > +		|| ufshcd_eh_in_progress(hba)
> > +		|| ufshcd_is_clkgating_enabled(hba))
> 
> I guess you want it to be "!ufshcd_is_clkgating_enabled(hba)" - if
> clk gating is enabled, we should let gating happen but not bail, right?
> 
> That said, I don't think we need to check whether clk gating is enabled or
> not here, since ufshcd_clkgating_store() manipulates clk_gating->active_reqs
> in an atomic way. If someone disables clk gating ->
> clk_gating->active_reqs++,
> this check becomes TURE on the very first condition.

Yeah, I found the above and and was testing it locally. Anyway, it seems you're
right. Let me give it a try back again.

Thanks,

> 
> So the very fisrt patch looks better to me.
> 
> Thanks,
> 
> Can Guo.
> 
> >  		return;
> > 
> >  	hba->clk_gating.state = REQ_CLKS_OFF;
> > diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
> > index 8344d8cb3678..09e59cb86e69 100644
> > --- a/drivers/scsi/ufs/ufshcd.h
> > +++ b/drivers/scsi/ufs/ufshcd.h
> > @@ -814,6 +814,11 @@ static inline bool
> > ufshcd_is_auto_hibern8_supported(struct ufs_hba *hba)
> >  		!(hba->quirks & UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8);
> >  }
> > 
> > +static inline bool ufshcd_is_clkgating_enabled(struct ufs_hba *hba)
> > +{
> > +	return hba->clk_gating.is_enabled;
> > +}
> > +
> >  static inline bool ufshcd_is_auto_hibern8_enabled(struct ufs_hba *hba)
> >  {
> >  	return FIELD_GET(UFSHCI_AHIBERN8_TIMER_MASK, hba->ahit) ? true :
> > false;

      reply	other threads:[~2020-10-20 19:17 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-16  6:02 [PATCH] scsi: ufs: fix no clkgating due to tag being alive Jaegeuk Kim
2020-10-16 21:18 ` [PATCH v2] scsi: ufs: fix clkgating on/off correctly jaegeuk
2020-10-19  9:18   ` Can Guo
2020-10-20 10:57   ` Can Guo
2020-10-20 19:17     ` jaegeuk [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201020191716.GA1726050@google.com \
    --to=jaegeuk@kernel.org \
    --cc=alim.akhtar@samsung.com \
    --cc=avri.altman@wdc.com \
    --cc=cang@codeaurora.org \
    --cc=kernel-team@android.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.