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 11:36:33 -0700	[thread overview]
Message-ID: <20171006113633.0186eb78@jacob-builder> (raw)
In-Reply-To: <1507310385-22388-1-git-send-email-jbaron@akamai.com>

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.

  reply	other threads:[~2017-10-06 18:33 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 [this message]
2017-10-06 18:41     ` Jason Baron
2017-10-06 21:09       ` Jacob Pan

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=20171006113633.0186eb78@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.