All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Frederic Weisbecker <frederic@kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	"Rafael J . Wysocki" <rafael@kernel.org>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	linux-pm@vger.kernel.org, Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>
Subject: Re: [PATCH 2/5] cpuidle: Introduce CPUIDLE_FLAG_MWAIT
Date: Tue, 10 Dec 2024 15:03:24 +0100	[thread overview]
Message-ID: <20241210140324.GR35539@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <20241206130408.18690-3-frederic@kernel.org>

On Fri, Dec 06, 2024 at 02:04:05PM +0100, Frederic Weisbecker wrote:
> From: Peter Zijlstra <peterz@infradead.org>
> 
> Provide a way to tell the cpuidle core about states monitoring
> TIF_NEED_RESCHED on the hardware level, monitor/mwait users being the
> only examples in use.
> 
> This will allow cpuidle core to manage TIF_NR_POLLING on behalf of all
> kinds of TIF_NEED_RESCHED watching states while keeping a necessary
> distinction for the governors between software loops polling on
> TIF_NEED_RESCHED and hardware monitored writes to thread flags.
> 
> [fweisbec: _ Initialize flag from acpi_processor_setup_cstates() instead
>              of acpi_processor_setup_lpi_states(), as the latter seem to
>              be about arm64...
>            _ Rename CPUIDLE_FLAG_NO_IPI to CPUIDLE_FLAG_MWAIT]
> 
> Not-yet-signed-off-by: Peter Zijlstra <peterz@infradead.org>

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>

> Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
> ---
>  drivers/acpi/processor_idle.c | 3 +++
>  drivers/idle/intel_idle.c     | 5 ++++-
>  include/linux/cpuidle.h       | 1 +
>  3 files changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
> index 698897b29de2..66cb5536d91e 100644
> --- a/drivers/acpi/processor_idle.c
> +++ b/drivers/acpi/processor_idle.c
> @@ -806,6 +806,9 @@ static int acpi_processor_setup_cstates(struct acpi_processor *pr)
>  		if (cx->type == ACPI_STATE_C1 || cx->type == ACPI_STATE_C2)
>  			drv->safe_state_index = count;
>  
> +		if (cx->entry_method == ACPI_CSTATE_FFH)
> +			state->flags |= CPUIDLE_FLAG_MWAIT;
> +
>  		/*
>  		 * Halt-induced C1 is not good for ->enter_s2idle, because it
>  		 * re-enables interrupts on exit.  Moreover, C1 is generally not
> diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
> index ac4d8faa3886..d52723fbeb04 100644
> --- a/drivers/idle/intel_idle.c
> +++ b/drivers/idle/intel_idle.c
> @@ -1787,7 +1787,8 @@ static void __init intel_idle_init_cstates_acpi(struct cpuidle_driver *drv)
>  		if (cx->type > ACPI_STATE_C1)
>  			state->target_residency *= 3;
>  
> -		state->flags = MWAIT2flg(cx->address);
> +		state->flags = MWAIT2flg(cx->address) | CPUIDLE_FLAG_MWAIT;
> +
>  		if (cx->type > ACPI_STATE_C2)
>  			state->flags |= CPUIDLE_FLAG_TLB_FLUSHED;
>  
> @@ -2072,6 +2073,8 @@ static bool __init intel_idle_verify_cstate(unsigned int mwait_hint)
>  
>  static void state_update_enter_method(struct cpuidle_state *state, int cstate)
>  {
> +	state->flags |= CPUIDLE_FLAG_MWAIT;
> +
>  	if (state->flags & CPUIDLE_FLAG_INIT_XSTATE) {
>  		/*
>  		 * Combining with XSTATE with IBRS or IRQ_ENABLE flags
> diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
> index a9ee4fe55dcf..b8084617aa27 100644
> --- a/include/linux/cpuidle.h
> +++ b/include/linux/cpuidle.h
> @@ -85,6 +85,7 @@ struct cpuidle_state {
>  #define CPUIDLE_FLAG_OFF		BIT(4) /* disable this state by default */
>  #define CPUIDLE_FLAG_TLB_FLUSHED	BIT(5) /* idle-state flushes TLBs */
>  #define CPUIDLE_FLAG_RCU_IDLE		BIT(6) /* idle-state takes care of RCU */
> +#define CPUIDLE_FLAG_MWAIT		BIT(7) /* hardware need_resched() monitoring */
>  
>  struct cpuidle_device_kobj;
>  struct cpuidle_state_kobj;
> -- 
> 2.46.0
> 

  reply	other threads:[~2024-12-10 14:03 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-06 13:04 [PATCH 0/5] cpuidle: Handle TIF_NR_POLLING on behalf of polling idle states v2 Frederic Weisbecker
2024-12-06 13:04 ` [PATCH 1/5] cpuidle: Remove unnecessary current_clr_polling_and_test() from haltpoll Frederic Weisbecker
2024-12-06 13:04 ` [PATCH 2/5] cpuidle: Introduce CPUIDLE_FLAG_MWAIT Frederic Weisbecker
2024-12-10 14:03   ` Peter Zijlstra [this message]
2024-12-06 13:04 ` [PATCH 3/5] cpuidle: Handle TIF_NR_POLLING on behalf of CPUIDLE_FLAG_MWAIT states Frederic Weisbecker
2024-12-10 14:03   ` Peter Zijlstra
2024-12-18 13:24   ` Rafael J. Wysocki
2024-12-18 14:04     ` Frederic Weisbecker
2024-12-06 13:04 ` [PATCH 4/5] cpuidle: Remove call_cpuidle_s2idle() Frederic Weisbecker
2024-12-06 13:04 ` [PATCH 5/5] cpuidle: Handle TIF_NR_POLLING on behalf of software polling idle states Frederic Weisbecker

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=20241210140324.GR35539@noisy.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=bp@alien8.de \
    --cc=daniel.lezcano@linaro.org \
    --cc=dave.hansen@linux.intel.com \
    --cc=frederic@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=rafael@kernel.org \
    --cc=tglx@linutronix.de \
    /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.