All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jacob Pan <jacob.jun.pan@linux.intel.com>
To: Jason Baron <jbaron@akamai.com>
Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	jacob.jun.pan@linux.intel.com
Subject: Re: [PATCH] intel_idle: replace conditionals with static_cpu_has(X86_FEATURE_ARAT)
Date: Fri, 6 Oct 2017 14:09:13 -0700	[thread overview]
Message-ID: <20171006140913.33417872@jacob-builder> (raw)
In-Reply-To: <e85b36ee-98fd-b1c9-1357-5d5af6f0d71d@akamai.com>

On Fri, 6 Oct 2017 14:41:07 -0400
Jason Baron <jbaron@akamai.com> wrote:

> On 10/06/2017 02:36 PM, Jacob Pan wrote:
> > On Fri,  6 Oct 2017 13:19:45 -0400
> > Jason Baron <jbaron@akamai.com> wrote:
> >   
> >> If the 'arat' cpu flag is set, then the conditionals in
> >> intel_idle() that guard calling tick_broadcast_enter()/exit() will
> >> never be true. Use static_cpu_has(X86_FEATURE_ARAT) to create a
> >> fast path to replace the conditional.
> >>
> >> Signed-off-by: Jason Baron <jbaron@akamai.com>
> >> Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
> >> Cc: Len Brown <lenb@kernel.org>
> >> Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >> ---
> >>  drivers/idle/intel_idle.c | 16 +++++++++++-----
> >>  1 file changed, 11 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
> >> index 5dc7ea4..5db5e31 100644
> >> --- a/drivers/idle/intel_idle.c
> >> +++ b/drivers/idle/intel_idle.c
> >> @@ -913,8 +913,7 @@ static __cpuidle int intel_idle(struct
> >> cpuidle_device *dev, struct cpuidle_state *state =
> >> &drv->states[index]; unsigned long eax = flg2MWAIT(state->flags);
> >>  	unsigned int cstate;
> >> -
> >> -	cstate = (((eax) >> MWAIT_SUBSTATE_SIZE) &
> >> MWAIT_CSTATE_MASK) + 1;
> >> +	bool uninitialized_var(tick);
> >>  
> >>  	/*
> >>  	 * NB: if CPUIDLE_FLAG_TLB_FLUSHED is set, this idle
> >> transition @@ -923,12 +922,19 @@ static __cpuidle int
> >> intel_idle(struct cpuidle_device *dev,
> >>  	 * useful with this knowledge.
> >>  	 */
> >>  
> >> -	if (!(lapic_timer_reliable_states & (1 << (cstate))))
> >> -		tick_broadcast_enter();
> >> +	if (!static_cpu_has(X86_FEATURE_ARAT)) {
> >> +		cstate = (((eax) >> MWAIT_SUBSTATE_SIZE) &
> >> +				MWAIT_CSTATE_MASK) + 1;
> >> +		tick = false;
> >> +		if (!(lapic_timer_reliable_states & (1 <<
> >> (cstate)))) {
> >> +			tick = true;
> >> +			tick_broadcast_enter();
> >> +		}
> >> +	}
> >>  
> >>  	mwait_idle_with_hints(eax, ecx);
> >>  
> >> -	if (!(lapic_timer_reliable_states & (1 << (cstate))))
> >> +	if (!static_cpu_has(X86_FEATURE_ARAT) && tick)
> >>  		tick_broadcast_exit();
> >>  
> >>  	return index;  
> > 
> > Seems better to have a function pointer set up at init time to
> > select whether we do tick_broadcast or not (two functions). There
> > is no need to check CPU feature on every entry.
> >   
> 
> Hi,
> 
> static_cpu_has() uses alternatives patching, so the cpu feature is not
> tested on every entry. With the arat flag set you just have two nops
> in the straight-line code path with this patch.
> 
Thanks for explaining, i didn't know it was self modifying.

Acked-by: Jacob Pan <jacob.jun.pan@linux.intel.com>

      reply	other threads:[~2017-10-06 21:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bug-109051-18156@https.bugzilla.kernel.org/>
2017-10-06 17:19 ` [PATCH] intel_idle: replace conditionals with static_cpu_has(X86_FEATURE_ARAT) Jason Baron
2017-10-06 18:36   ` Jacob Pan
2017-10-06 18:41     ` Jason Baron
2017-10-06 21:09       ` Jacob Pan [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=20171006140913.33417872@jacob-builder \
    --to=jacob.jun.pan@linux.intel.com \
    --cc=jbaron@akamai.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@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.