All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: juri.lelli@redhat.com, rafael@kernel.org,
	catalin.marinas@arm.com,  linus.walleij@linaro.org,
	bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
	 agordeev@linux.ibm.com, linux-arch@vger.kernel.org,
	 vincent.guittot@linaro.org, mpe@ellerman.id.au,
	chenhuacai@kernel.org,  christophe.leroy@csgroup.eu,
	linux-acpi@vger.kernel.org, agross@kernel.org,
	 geert@linux-m68k.org, linux-imx@nxp.com, vgupta@kernel.org,
	 mattst88@gmail.com, mturquette@baylibre.com, sammy@sammy.net,
	 pmladek@suse.com, linux-pm@vger.kernel.org,
	 Sascha Hauer <s.hauer@pengutronix.de>,
	linux-um@lists.infradead.org, npiggin@gmail.com,
	 tglx@linutronix.de, linux-omap@vger.kernel.org,
	dietmar.eggemann@arm.com,  andreyknvl@gmail.com,
	gregkh@linuxfoundation.org,  linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org,  senozhatsky@chromium.org,
	svens@linux.ibm.com, jolsa@kernel.org,  tj@kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	mark.rutland@arm.com,  linux-ia64@vger.kernel.org,
	dave.hansen@linux.intel.com,
	 virtualization@lists.linux-foundation.org,
	 James.Bottomley@hansenpartnership.com, jcmvbkbc@gmail.com,
	 thierry.reding@gmail.com, kernel@xen0n.name, cl@linux.com,
	 linux-s390@vger.kernel.org, vschneid@redhat.com,
	john.ogness@linutronix.de,  ysato@users.sourceforge.jp,
	linux-sh@vger.kernel.org, festevam@gmail.com,  deller@gmx.de,
	daniel.lezcano@linaro.org, jonathanh@nvidia.com,
	 dennis@kernel.org, lenb@kernel.org,
	linux-xtensa@linux-xtensa.org,  kernel@pengutronix.de,
	gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
	 linux-alpha@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	 loongarch@lists.linux.dev, shorne@gmail.com, chris@zankel.net,
	 sboyd@kernel.org, dinguyen@kernel.org, bristot@redhat.com,
	 alexander.shishkin@linux.intel.com, fweisbec@gmail.com,
	lpieralisi@kernel.org,  atishp@atishpatra.org,
	linux@rasmusvillemoes.dk, kasan-dev@googlegroups.com,
	 will@kernel.org, boris.ostrovsky@oracle.com, khilman@kernel.org,
	 linux-csky@vger.kernel.org, pv-drivers@vmware.com,
	 linux-snps-arc@lists.infradead.org, mgorman@suse.de,
	 jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
	ulli.kroll@googlemail.com,  linux-clk@vger.kernel.org,
	rostedt@goodmis.org, ink@jurassic.park.msu.ru,
	 bcain@quicinc.com, tsbogend@alpha.franken.de,
	linux-parisc@vger.kernel.org,  ryabinin.a.a@gmail.com,
	sudeep.holla@arm.com, shawnguo@kernel.org,  davem@davemloft.net,
	dalias@libc.org, tony@atomide.com, amakhalov@vmware.com,
	 konrad.dybcio@somainline.org, bjorn.andersson@linaro.org,
	glider@google.com,  hpa@zytor.com, sparclinux@vger.kernel.org,
	linux-hexagon@vger.kernel.org,  linux-riscv@lists.infradead.org,
	vincenzo.frascino@arm.com,  anton.ivanov@cambridgegreys.com,
	jonas@southpole.se, yury.norov@gmail.com,  richard@nod.at,
	x86@kernel.org, linux@armlinux.org.uk, mingo@redhat.com,
	 aou@eecs.berkeley.edu, hca@linux.ibm.com,
	richard.henderson@linaro.org,  stefan.kristiansson@saunalahti.fi,
	openrisc@lists.librecores.org,  acme@kernel.org,
	paul.walmsley@sifive.com, linux-tegra@vger.kernel.org,
	 namhyung@kernel.org, andriy.shevchenko@linux.intel.com,
	jpoimboe@kernel.org,  dvyukov@google.com, jgross@suse.com,
	monstr@monstr.eu,  linux-mips@vger.kernel.org,
	palmer@dabbelt.com, anup@brainfault.org,  bp@alien8.de,
	johannes@sipsolutions.net, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 12/44] cpuidle,dt: Push RCU-idle into driver
Date: Tue, 4 Oct 2022 13:43:31 +0200	[thread overview]
Message-ID: <CAPDyKFqGSt2NFe8aY=6rkp4P-WH7DCO1fmWrcXk4_5XNEvv25w@mail.gmail.com> (raw)
In-Reply-To: <CAPDyKFqTWd4W5Ofk76CtC4X43dxBTNHtmY9YzN355-vpviLsPw@mail.gmail.com>

On Tue, 4 Oct 2022 at 13:03, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Mon, 19 Sept 2022 at 12:18, Peter Zijlstra <peterz@infradead.org> wrote:
> >
> > Doing RCU-idle outside the driver, only to then temporarily enable it
> > again before going idle is daft.
> >
> > Notably: this converts all dt_init_idle_driver() and
> > __CPU_PM_CPU_IDLE_ENTER() users for they are inextrably intertwined.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

This was not (yet) my intention. Please have a look at the comments I
provided below.

Kind regards
Uffe

>
> > ---
> >  arch/arm/mach-omap2/cpuidle34xx.c    |    4 ++--
> >  drivers/acpi/processor_idle.c        |    2 ++
> >  drivers/cpuidle/cpuidle-arm.c        |    1 +
> >  drivers/cpuidle/cpuidle-big_little.c |    8 ++++++--
> >  drivers/cpuidle/cpuidle-psci.c       |    1 +
> >  drivers/cpuidle/cpuidle-qcom-spm.c   |    1 +
> >  drivers/cpuidle/cpuidle-riscv-sbi.c  |    1 +
> >  drivers/cpuidle/dt_idle_states.c     |    2 +-
> >  include/linux/cpuidle.h              |    4 ++++
> >  9 files changed, 19 insertions(+), 5 deletions(-)
> >
> > --- a/drivers/acpi/processor_idle.c
> > +++ b/drivers/acpi/processor_idle.c
> > @@ -1200,6 +1200,8 @@ static int acpi_processor_setup_lpi_stat
> >                 state->target_residency = lpi->min_residency;
> >                 if (lpi->arch_flags)
> >                         state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> > +               if (lpi->entry_method == ACPI_CSTATE_FFH)
> > +                       state->flags |= CPUIDLE_FLAG_RCU_IDLE;
>
> I assume the state index here will never be 0?
>
> If not, it may lead to that acpi_processor_ffh_lpi_enter() may trigger
> CPU_PM_CPU_IDLE_ENTER_PARAM() to call ct_cpuidle_enter|exit() for an
> idle-state that doesn't have the CPUIDLE_FLAG_RCU_IDLE bit set.
>
> >                 state->enter = acpi_idle_lpi_enter;
> >                 drv->safe_state_index = i;
> >         }
> > --- a/drivers/cpuidle/cpuidle-arm.c
> > +++ b/drivers/cpuidle/cpuidle-arm.c
> > @@ -53,6 +53,7 @@ static struct cpuidle_driver arm_idle_dr
> >          * handler for idle state index 0.
> >          */
> >         .states[0] = {
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
>
> Comparing arm64 and arm32 idle-states/idle-drivers, the $subject
> series ends up setting the CPUIDLE_FLAG_RCU_IDLE for the ARM WFI idle
> state (state zero), but only for the arm64 and psci cases (mostly
> arm64). For arm32 we would need to update the ARM_CPUIDLE_WFI_STATE
> too, as that is what most arm32 idle-drivers are using. My point is,
> the code becomes a bit inconsistent.
>
> Perhaps it's easier to avoid setting the CPUIDLE_FLAG_RCU_IDLE bit for
> all of the ARM WFI idle states, for both arm64 and arm32?
>
> >                 .enter                  = arm_enter_idle_state,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> > --- a/drivers/cpuidle/cpuidle-big_little.c
> > +++ b/drivers/cpuidle/cpuidle-big_little.c
> > @@ -64,7 +64,8 @@ static struct cpuidle_driver bl_idle_lit
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 700,
> >                 .target_residency       = 2500,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM little-cluster power down",
> >         },
> > @@ -85,7 +86,8 @@ static struct cpuidle_driver bl_idle_big
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 500,
> >                 .target_residency       = 2000,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM big-cluster power down",
> >         },
> > @@ -124,11 +126,13 @@ static int bl_enter_powerdown(struct cpu
> >                                 struct cpuidle_driver *drv, int idx)
> >  {
> >         cpu_pm_enter();
> > +       ct_idle_enter();
> >
> >         cpu_suspend(0, bl_powerdown_finisher);
> >
> >         /* signals the MCPM core that CPU is out of low power state */
> >         mcpm_cpu_powered_up();
> > +       ct_idle_exit();
> >
> >         cpu_pm_exit();
> >
> > --- a/drivers/cpuidle/cpuidle-psci.c
> > +++ b/drivers/cpuidle/cpuidle-psci.c
> > @@ -357,6 +357,7 @@ static int psci_idle_init_cpu(struct dev
> >          * PSCI idle states relies on architectural WFI to be represented as
> >          * state index 0.
> >          */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = psci_enter_idle_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/cpuidle-qcom-spm.c
> > +++ b/drivers/cpuidle/cpuidle-qcom-spm.c
> > @@ -72,6 +72,7 @@ static struct cpuidle_driver qcom_spm_id
> >         .owner = THIS_MODULE,
> >         .states[0] = {
> >                 .enter                  = spm_enter_idle_state,
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> >                 .power_usage            = UINT_MAX,
> > --- a/drivers/cpuidle/cpuidle-riscv-sbi.c
> > +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c
> > @@ -332,6 +332,7 @@ static int sbi_cpuidle_init_cpu(struct d
> >         drv->cpumask = (struct cpumask *)cpumask_of(cpu);
> >
> >         /* RISC-V architectural WFI to be represented as state index 0. */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = sbi_cpuidle_enter_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/dt_idle_states.c
> > +++ b/drivers/cpuidle/dt_idle_states.c
> > @@ -77,7 +77,7 @@ static int init_state_node(struct cpuidl
> >         if (err)
> >                 desc = state_node->name;
> >
> > -       idle_state->flags = 0;
> > +       idle_state->flags = CPUIDLE_FLAG_RCU_IDLE;
> >         if (of_property_read_bool(state_node, "local-timer-stop"))
> >                 idle_state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> >         /*
> > --- a/include/linux/cpuidle.h
> > +++ b/include/linux/cpuidle.h
> > @@ -282,14 +282,18 @@ extern s64 cpuidle_governor_latency_req(
> >         int __ret = 0;                                                  \
> >                                                                         \
> >         if (!idx) {                                                     \
> > +               ct_idle_enter();                                        \
>
> According to my comment above, we should then drop these calls to
> ct_idle_enter and ct_idle_exit() here. Right?
>
> >                 cpu_do_idle();                                          \
> > +               ct_idle_exit();                                         \
> >                 return idx;                                             \
> >         }                                                               \
> >                                                                         \
> >         if (!is_retention)                                              \
> >                 __ret =  cpu_pm_enter();                                \
> >         if (!__ret) {                                                   \
> > +               ct_idle_enter();                                        \
> >                 __ret = low_level_idle_enter(state);                    \
> > +               ct_idle_exit();                                         \
> >                 if (!is_retention)                                      \
> >                         cpu_pm_exit();                                  \
> >         }                                                               \
> >
>
> Kind regards
> Uffe

WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: juri.lelli@redhat.com, rafael@kernel.org,
	catalin.marinas@arm.com, linus.walleij@linaro.org,
	bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
	agordeev@linux.ibm.com, linux-clk@vger.kernel.org,
	linux-arch@vger.kernel.org, vincent.guittot@linaro.org,
	mpe@ellerman.id.au, linux-sh@vger.kernel.org,
	kasan-dev@googlegroups.com, linux-acpi@vger.kernel.org,
	mingo@redhat.com, geert@linux-m68k.org, linux-imx@nxp.com,
	vgupta@kernel.org, mattst88@gmail.com, lpieralisi@kernel.org,
	sammy@sammy.net, pmladek@suse.com, linux-pm@vger.kernel.org,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-um@lists.infradead.org, npiggin@gmail.com,
	tglx@linutronix.de, linux-omap@vger.kernel.org,
	dietmar.eggemann@arm.com, andreyknvl@gmail.com,
	gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org, senozhatsky@chromium.org,
	svens@linux.ibm.com, kernel@pengutronix.de, tj@kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	mark.rutland@arm.com, linux-ia64@vger.kernel.org,
	dave.hansen@linux.intel.com,
	virtualization@lists.linux-foundation.org,
	James.Bottomley@hansenpartnership.com, jcmvbkbc@gmail.com,
	thierry.reding@gmail.com, kernel@xen0n.name, cl@linux.com,
	linux-s390@vger.kernel.org, vschneid@redhat.com,
	john.ogness@linutronix.de, ysato@users.sourceforge.jp,
	festevam@gmail.com, deller@gmx.de, daniel.lezcano@linaro.org,
	jonathanh@nvidia.com, dennis@kernel.org, lenb@kernel.org,
	linux-xtensa@linux-xtensa.org, jolsa@kernel.org,
	gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
	sudeep.holla@arm.com, linux-m68k@lists.linux-m68k.org,
	loongarch@lists.linux.dev, shorne@gmail.com, chris@zankel.net,
	sboyd@kernel.org, dinguyen@kernel.org, bristot@redhat.com,
	chenhuacai@kernel.org, alexander.shishkin@linux.intel.com,
	fweisbec@gmail.com, mturquette@baylibre.com,
	paul.walmsley@sifive.com, linux@rasmusvillemoes.dk,
	christophe.leroy@csgroup.eu, will@kernel.org,
	boris.ostrovsky@oracle.com, khilman@kernel.org,
	linux-csky@vger.kernel.org, tony@atomide.com,
	linux-snps-arc@lists.infradead.org, mgorman@suse.de,
	jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
	ulli.kroll@googlemail.com, rostedt@goodmis.org,
	ink@jurassic.park.msu.ru, bcain@quicinc.com,
	tsbogend@alpha.franken.de, linux-parisc@vger.kernel.org,
	anup@brainfault.org, ryabinin.a.a@gmail.com,
	linux-alpha@vger.kernel.org, shawnguo@kernel.org,
	davem@davemloft.net, dalias@libc.org, pv-drivers@vmware.com,
	hpa@zytor.com, konrad.dybcio@somainline.org,
	bjorn.andersson@linaro.org, glider@google.com,
	amakhalov@vmware.com, sparclinux@vger.kernel.org,
	linux-riscv@lists.infradead.org, vincenzo.frascino@arm.com,
	anton.ivanov@cambridgegreys.com, jonas@southpole.se,
	yury.norov@gmail.com, richard@nod.at, x86@kernel.org,
	linux@armlinux.org.uk, agross@kernel.org, aou@eecs.berkeley.edu,
	hca@linux.ibm.com, richard.henderson@linaro.org,
	stefan.kristiansson@saunalahti.fi, openrisc@lists.librecores.org,
	acme@kernel.org, atishp@atishpatra.org,
	linux-tegra@vger.kernel.org, namhyung@kernel.org,
	andriy.shevchenko@linux.intel.com, jpoimboe@kernel.org,
	dvyukov@google.com, jgross@suse.com, monstr@monstr.eu,
	linux-mips@vger.kernel.org, palmer@dabbelt.com,
	linux-hexagon@vger.kernel.org, bp@alien8.de,
	johannes@sipsolutions.net, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 12/44] cpuidle,dt: Push RCU-idle into driver
Date: Tue, 4 Oct 2022 13:43:31 +0200	[thread overview]
Message-ID: <CAPDyKFqGSt2NFe8aY=6rkp4P-WH7DCO1fmWrcXk4_5XNEvv25w@mail.gmail.com> (raw)
In-Reply-To: <CAPDyKFqTWd4W5Ofk76CtC4X43dxBTNHtmY9YzN355-vpviLsPw@mail.gmail.com>

On Tue, 4 Oct 2022 at 13:03, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Mon, 19 Sept 2022 at 12:18, Peter Zijlstra <peterz@infradead.org> wrote:
> >
> > Doing RCU-idle outside the driver, only to then temporarily enable it
> > again before going idle is daft.
> >
> > Notably: this converts all dt_init_idle_driver() and
> > __CPU_PM_CPU_IDLE_ENTER() users for they are inextrably intertwined.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

This was not (yet) my intention. Please have a look at the comments I
provided below.

Kind regards
Uffe

>
> > ---
> >  arch/arm/mach-omap2/cpuidle34xx.c    |    4 ++--
> >  drivers/acpi/processor_idle.c        |    2 ++
> >  drivers/cpuidle/cpuidle-arm.c        |    1 +
> >  drivers/cpuidle/cpuidle-big_little.c |    8 ++++++--
> >  drivers/cpuidle/cpuidle-psci.c       |    1 +
> >  drivers/cpuidle/cpuidle-qcom-spm.c   |    1 +
> >  drivers/cpuidle/cpuidle-riscv-sbi.c  |    1 +
> >  drivers/cpuidle/dt_idle_states.c     |    2 +-
> >  include/linux/cpuidle.h              |    4 ++++
> >  9 files changed, 19 insertions(+), 5 deletions(-)
> >
> > --- a/drivers/acpi/processor_idle.c
> > +++ b/drivers/acpi/processor_idle.c
> > @@ -1200,6 +1200,8 @@ static int acpi_processor_setup_lpi_stat
> >                 state->target_residency = lpi->min_residency;
> >                 if (lpi->arch_flags)
> >                         state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> > +               if (lpi->entry_method == ACPI_CSTATE_FFH)
> > +                       state->flags |= CPUIDLE_FLAG_RCU_IDLE;
>
> I assume the state index here will never be 0?
>
> If not, it may lead to that acpi_processor_ffh_lpi_enter() may trigger
> CPU_PM_CPU_IDLE_ENTER_PARAM() to call ct_cpuidle_enter|exit() for an
> idle-state that doesn't have the CPUIDLE_FLAG_RCU_IDLE bit set.
>
> >                 state->enter = acpi_idle_lpi_enter;
> >                 drv->safe_state_index = i;
> >         }
> > --- a/drivers/cpuidle/cpuidle-arm.c
> > +++ b/drivers/cpuidle/cpuidle-arm.c
> > @@ -53,6 +53,7 @@ static struct cpuidle_driver arm_idle_dr
> >          * handler for idle state index 0.
> >          */
> >         .states[0] = {
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
>
> Comparing arm64 and arm32 idle-states/idle-drivers, the $subject
> series ends up setting the CPUIDLE_FLAG_RCU_IDLE for the ARM WFI idle
> state (state zero), but only for the arm64 and psci cases (mostly
> arm64). For arm32 we would need to update the ARM_CPUIDLE_WFI_STATE
> too, as that is what most arm32 idle-drivers are using. My point is,
> the code becomes a bit inconsistent.
>
> Perhaps it's easier to avoid setting the CPUIDLE_FLAG_RCU_IDLE bit for
> all of the ARM WFI idle states, for both arm64 and arm32?
>
> >                 .enter                  = arm_enter_idle_state,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> > --- a/drivers/cpuidle/cpuidle-big_little.c
> > +++ b/drivers/cpuidle/cpuidle-big_little.c
> > @@ -64,7 +64,8 @@ static struct cpuidle_driver bl_idle_lit
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 700,
> >                 .target_residency       = 2500,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM little-cluster power down",
> >         },
> > @@ -85,7 +86,8 @@ static struct cpuidle_driver bl_idle_big
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 500,
> >                 .target_residency       = 2000,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM big-cluster power down",
> >         },
> > @@ -124,11 +126,13 @@ static int bl_enter_powerdown(struct cpu
> >                                 struct cpuidle_driver *drv, int idx)
> >  {
> >         cpu_pm_enter();
> > +       ct_idle_enter();
> >
> >         cpu_suspend(0, bl_powerdown_finisher);
> >
> >         /* signals the MCPM core that CPU is out of low power state */
> >         mcpm_cpu_powered_up();
> > +       ct_idle_exit();
> >
> >         cpu_pm_exit();
> >
> > --- a/drivers/cpuidle/cpuidle-psci.c
> > +++ b/drivers/cpuidle/cpuidle-psci.c
> > @@ -357,6 +357,7 @@ static int psci_idle_init_cpu(struct dev
> >          * PSCI idle states relies on architectural WFI to be represented as
> >          * state index 0.
> >          */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = psci_enter_idle_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/cpuidle-qcom-spm.c
> > +++ b/drivers/cpuidle/cpuidle-qcom-spm.c
> > @@ -72,6 +72,7 @@ static struct cpuidle_driver qcom_spm_id
> >         .owner = THIS_MODULE,
> >         .states[0] = {
> >                 .enter                  = spm_enter_idle_state,
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> >                 .power_usage            = UINT_MAX,
> > --- a/drivers/cpuidle/cpuidle-riscv-sbi.c
> > +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c
> > @@ -332,6 +332,7 @@ static int sbi_cpuidle_init_cpu(struct d
> >         drv->cpumask = (struct cpumask *)cpumask_of(cpu);
> >
> >         /* RISC-V architectural WFI to be represented as state index 0. */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = sbi_cpuidle_enter_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/dt_idle_states.c
> > +++ b/drivers/cpuidle/dt_idle_states.c
> > @@ -77,7 +77,7 @@ static int init_state_node(struct cpuidl
> >         if (err)
> >                 desc = state_node->name;
> >
> > -       idle_state->flags = 0;
> > +       idle_state->flags = CPUIDLE_FLAG_RCU_IDLE;
> >         if (of_property_read_bool(state_node, "local-timer-stop"))
> >                 idle_state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> >         /*
> > --- a/include/linux/cpuidle.h
> > +++ b/include/linux/cpuidle.h
> > @@ -282,14 +282,18 @@ extern s64 cpuidle_governor_latency_req(
> >         int __ret = 0;                                                  \
> >                                                                         \
> >         if (!idx) {                                                     \
> > +               ct_idle_enter();                                        \
>
> According to my comment above, we should then drop these calls to
> ct_idle_enter and ct_idle_exit() here. Right?
>
> >                 cpu_do_idle();                                          \
> > +               ct_idle_exit();                                         \
> >                 return idx;                                             \
> >         }                                                               \
> >                                                                         \
> >         if (!is_retention)                                              \
> >                 __ret =  cpu_pm_enter();                                \
> >         if (!__ret) {                                                   \
> > +               ct_idle_enter();                                        \
> >                 __ret = low_level_idle_enter(state);                    \
> > +               ct_idle_exit();                                         \
> >                 if (!is_retention)                                      \
> >                         cpu_pm_exit();                                  \
> >         }                                                               \
> >
>
> Kind regards
> Uffe
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: juri.lelli@redhat.com, rafael@kernel.org,
	catalin.marinas@arm.com,  linus.walleij@linaro.org,
	bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
	 agordeev@linux.ibm.com, linux-arch@vger.kernel.org,
	 vincent.guittot@linaro.org, mpe@ellerman.id.au,
	chenhuacai@kernel.org,  christophe.leroy@csgroup.eu,
	linux-acpi@vger.kernel.org, agross@kernel.org,
	 geert@linux-m68k.org, linux-imx@nxp.com, vgupta@kernel.org,
	 mattst88@gmail.com, mturquette@baylibre.com, sammy@sammy.net,
	 pmladek@suse.com, linux-pm@vger.kernel.org,
	 Sascha Hauer <s.hauer@pengutronix.de>,
	linux-um@lists.infradead.org, npiggin@gmail.com,
	 tglx@linutronix.de, linux-omap@vger.kernel.org,
	dietmar.eggemann@arm.com,  andreyknvl@gmail.com,
	gregkh@linuxfoundation.org,  linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org,  senozhatsky@chromium.org,
	svens@linux.ibm.com, jolsa@kernel.org,  tj@kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	mark.rutland@arm.com,  linux-ia64@vger.kernel.org,
	dave.hansen@linux.intel.com,
	 virtualization@lists.linux-foundation.org,
	 James.Bottomley@hansenpartnership.com, jcmvbkbc@gmail.com,
	 thierry.reding@gmail.com, kernel@xen0n.name, cl@linux.com,
	 linux-s390@vger.kernel.org, vschneid@redhat.com,
	john.ogness@linutronix.de,  ysato@users.sourceforge.jp,
	linux-sh@vger.kernel.org, festevam@gmail.com,  deller@gmx.de,
	daniel.lezcano@linaro.org, jonathanh@nvidia.com,
	 dennis@kernel.org, lenb@kernel.org,
	linux-xtensa@linux-xtensa.org,  kernel@pengutronix.de,
	gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
	 linux-alpha@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	 loongarch@lists.linux.dev, shorne@gmail.com, chris@zankel.net,
	 sboyd@kernel.org, dinguyen@kernel.org, bristot@redhat.com,
	 alexander.shishkin@linux.intel.com, fweisbec@gmail.com,
	lpieralisi@kernel.org,  atishp@atishpatra.org,
	linux@rasmusvillemoes.dk, kasan-dev@googlegroups.com,
	 will@kernel.org, boris.ostrovsky@oracle.com, khilman@kernel.org,
	 linux-csky@vger.kernel.org, pv-drivers@vmware.com,
	 linux-snps-arc@lists.infradead.org, mgorman@suse.de,
	 jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
	ulli.kroll@googlemail.com,  linux-clk@vger.kernel.org,
	rostedt@goodmis.org, ink@jurassic.park.msu.ru,
	 bcain@quicinc.com, tsbogend@alpha.franken.de,
	linux-parisc@vger.kernel.org,  ryabinin.a.a@gmail.com,
	sudeep.holla@arm.com, shawnguo@kernel.org,  davem@davemloft.net,
	dalias@libc.org, tony@atomide.com, amakhalov@vmware.com,
	 konrad.dybcio@somainline.org, bjorn.andersson@linaro.org,
	glider@google.com,  hpa@zytor.com, sparclinux@vger.kernel.org,
	linux-hexagon@vger.kernel.org,  linux-riscv@lists.infradead.org,
	vincenzo.frascino@arm.com,  anton.ivanov@cambridgegreys.com,
	jonas@southpole.se, yury.norov@gmail.com,  richard@nod.at,
	x86@kernel.org, linux@armlinux.org.uk, mingo@redhat.com,
	 aou@eecs.berkeley.edu, hca@linux.ibm.com,
	richard.henderson@linaro.org,  stefan.kristiansson@saunalahti.fi,
	openrisc@lists.librecores.org,  acme@kernel.org,
	paul.walmsley@sifive.com, linux-tegra@vger.kernel.org,
	 namhyung@kernel.org, andriy.shevchenko@linux.intel.com,
	jpoimboe@kernel.org,  dvyukov@google.com, jgross@suse.com,
	monstr@monstr.eu,  linux-mips@vger.kernel.org,
	palmer@dabbelt.com, anup@brainfault.org,  bp@alien8.de,
	johannes@sipsolutions.net, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 12/44] cpuidle,dt: Push RCU-idle into driver
Date: Tue, 4 Oct 2022 13:43:31 +0200	[thread overview]
Message-ID: <CAPDyKFqGSt2NFe8aY=6rkp4P-WH7DCO1fmWrcXk4_5XNEvv25w@mail.gmail.com> (raw)
In-Reply-To: <CAPDyKFqTWd4W5Ofk76CtC4X43dxBTNHtmY9YzN355-vpviLsPw@mail.gmail.com>

On Tue, 4 Oct 2022 at 13:03, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Mon, 19 Sept 2022 at 12:18, Peter Zijlstra <peterz@infradead.org> wrote:
> >
> > Doing RCU-idle outside the driver, only to then temporarily enable it
> > again before going idle is daft.
> >
> > Notably: this converts all dt_init_idle_driver() and
> > __CPU_PM_CPU_IDLE_ENTER() users for they are inextrably intertwined.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

This was not (yet) my intention. Please have a look at the comments I
provided below.

Kind regards
Uffe

>
> > ---
> >  arch/arm/mach-omap2/cpuidle34xx.c    |    4 ++--
> >  drivers/acpi/processor_idle.c        |    2 ++
> >  drivers/cpuidle/cpuidle-arm.c        |    1 +
> >  drivers/cpuidle/cpuidle-big_little.c |    8 ++++++--
> >  drivers/cpuidle/cpuidle-psci.c       |    1 +
> >  drivers/cpuidle/cpuidle-qcom-spm.c   |    1 +
> >  drivers/cpuidle/cpuidle-riscv-sbi.c  |    1 +
> >  drivers/cpuidle/dt_idle_states.c     |    2 +-
> >  include/linux/cpuidle.h              |    4 ++++
> >  9 files changed, 19 insertions(+), 5 deletions(-)
> >
> > --- a/drivers/acpi/processor_idle.c
> > +++ b/drivers/acpi/processor_idle.c
> > @@ -1200,6 +1200,8 @@ static int acpi_processor_setup_lpi_stat
> >                 state->target_residency = lpi->min_residency;
> >                 if (lpi->arch_flags)
> >                         state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> > +               if (lpi->entry_method == ACPI_CSTATE_FFH)
> > +                       state->flags |= CPUIDLE_FLAG_RCU_IDLE;
>
> I assume the state index here will never be 0?
>
> If not, it may lead to that acpi_processor_ffh_lpi_enter() may trigger
> CPU_PM_CPU_IDLE_ENTER_PARAM() to call ct_cpuidle_enter|exit() for an
> idle-state that doesn't have the CPUIDLE_FLAG_RCU_IDLE bit set.
>
> >                 state->enter = acpi_idle_lpi_enter;
> >                 drv->safe_state_index = i;
> >         }
> > --- a/drivers/cpuidle/cpuidle-arm.c
> > +++ b/drivers/cpuidle/cpuidle-arm.c
> > @@ -53,6 +53,7 @@ static struct cpuidle_driver arm_idle_dr
> >          * handler for idle state index 0.
> >          */
> >         .states[0] = {
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
>
> Comparing arm64 and arm32 idle-states/idle-drivers, the $subject
> series ends up setting the CPUIDLE_FLAG_RCU_IDLE for the ARM WFI idle
> state (state zero), but only for the arm64 and psci cases (mostly
> arm64). For arm32 we would need to update the ARM_CPUIDLE_WFI_STATE
> too, as that is what most arm32 idle-drivers are using. My point is,
> the code becomes a bit inconsistent.
>
> Perhaps it's easier to avoid setting the CPUIDLE_FLAG_RCU_IDLE bit for
> all of the ARM WFI idle states, for both arm64 and arm32?
>
> >                 .enter                  = arm_enter_idle_state,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> > --- a/drivers/cpuidle/cpuidle-big_little.c
> > +++ b/drivers/cpuidle/cpuidle-big_little.c
> > @@ -64,7 +64,8 @@ static struct cpuidle_driver bl_idle_lit
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 700,
> >                 .target_residency       = 2500,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM little-cluster power down",
> >         },
> > @@ -85,7 +86,8 @@ static struct cpuidle_driver bl_idle_big
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 500,
> >                 .target_residency       = 2000,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM big-cluster power down",
> >         },
> > @@ -124,11 +126,13 @@ static int bl_enter_powerdown(struct cpu
> >                                 struct cpuidle_driver *drv, int idx)
> >  {
> >         cpu_pm_enter();
> > +       ct_idle_enter();
> >
> >         cpu_suspend(0, bl_powerdown_finisher);
> >
> >         /* signals the MCPM core that CPU is out of low power state */
> >         mcpm_cpu_powered_up();
> > +       ct_idle_exit();
> >
> >         cpu_pm_exit();
> >
> > --- a/drivers/cpuidle/cpuidle-psci.c
> > +++ b/drivers/cpuidle/cpuidle-psci.c
> > @@ -357,6 +357,7 @@ static int psci_idle_init_cpu(struct dev
> >          * PSCI idle states relies on architectural WFI to be represented as
> >          * state index 0.
> >          */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = psci_enter_idle_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/cpuidle-qcom-spm.c
> > +++ b/drivers/cpuidle/cpuidle-qcom-spm.c
> > @@ -72,6 +72,7 @@ static struct cpuidle_driver qcom_spm_id
> >         .owner = THIS_MODULE,
> >         .states[0] = {
> >                 .enter                  = spm_enter_idle_state,
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> >                 .power_usage            = UINT_MAX,
> > --- a/drivers/cpuidle/cpuidle-riscv-sbi.c
> > +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c
> > @@ -332,6 +332,7 @@ static int sbi_cpuidle_init_cpu(struct d
> >         drv->cpumask = (struct cpumask *)cpumask_of(cpu);
> >
> >         /* RISC-V architectural WFI to be represented as state index 0. */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = sbi_cpuidle_enter_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/dt_idle_states.c
> > +++ b/drivers/cpuidle/dt_idle_states.c
> > @@ -77,7 +77,7 @@ static int init_state_node(struct cpuidl
> >         if (err)
> >                 desc = state_node->name;
> >
> > -       idle_state->flags = 0;
> > +       idle_state->flags = CPUIDLE_FLAG_RCU_IDLE;
> >         if (of_property_read_bool(state_node, "local-timer-stop"))
> >                 idle_state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> >         /*
> > --- a/include/linux/cpuidle.h
> > +++ b/include/linux/cpuidle.h
> > @@ -282,14 +282,18 @@ extern s64 cpuidle_governor_latency_req(
> >         int __ret = 0;                                                  \
> >                                                                         \
> >         if (!idx) {                                                     \
> > +               ct_idle_enter();                                        \
>
> According to my comment above, we should then drop these calls to
> ct_idle_enter and ct_idle_exit() here. Right?
>
> >                 cpu_do_idle();                                          \
> > +               ct_idle_exit();                                         \
> >                 return idx;                                             \
> >         }                                                               \
> >                                                                         \
> >         if (!is_retention)                                              \
> >                 __ret =  cpu_pm_enter();                                \
> >         if (!__ret) {                                                   \
> > +               ct_idle_enter();                                        \
> >                 __ret = low_level_idle_enter(state);                    \
> > +               ct_idle_exit();                                         \
> >                 if (!is_retention)                                      \
> >                         cpu_pm_exit();                                  \
> >         }                                                               \
> >
>
> Kind regards
> Uffe

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: juri.lelli@redhat.com, rafael@kernel.org,
	catalin.marinas@arm.com,  linus.walleij@linaro.org,
	bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
	 agordeev@linux.ibm.com, linux-arch@vger.kernel.org,
	 vincent.guittot@linaro.org, mpe@ellerman.id.au,
	chenhuacai@kernel.org,  christophe.leroy@csgroup.eu,
	linux-acpi@vger.kernel.org, agross@kernel.org,
	 geert@linux-m68k.org, linux-imx@nxp.com, vgupta@kernel.org,
	 mattst88@gmail.com, mturquette@baylibre.com, sammy@sammy.net,
	 pmladek@suse.com, linux-pm@vger.kernel.org,
	 Sascha Hauer <s.hauer@pengutronix.de>,
	linux-um@lists.infradead.org, npiggin@gmail.com,
	 tglx@linutronix.de, linux-omap@vger.kernel.org,
	dietmar.eggemann@arm.com,  andreyknvl@gmail.com,
	gregkh@linuxfoundation.org,  linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org,  senozhatsky@chromium.org,
	svens@linux.ibm.com, jolsa@kernel.org,  tj@kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	mark.rutland@arm.com,  linux-ia64@vger.kernel.org,
	dave.hansen@linux.intel.com,
	 virtualization@lists.linux-foundation.org,
	 James.Bottomley@hansenpartnership.com, jcmvbkbc@gmail.com,
	 thierry.reding@gmail.com, kernel@xen0n.name, cl@linux.com,
	 linux-s390@vger.kernel.org, vschneid@redhat.com,
	john.ogness@linutronix.de,  ysato@users.sourceforge.jp,
	linux-sh@vger.kernel.org, festevam@gmail.com,  deller@gmx.de,
	daniel.lezcano@linaro.org, jonathanh@nvidia.com,
	 dennis@kernel.org, lenb@kernel.org,
	linux-xtensa@linux-xtensa.org,  kernel@pengutronix.de,
	gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
	 linux-alpha@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	 loongarch@lists.linux.dev, shorne@gmail.com, chris@zankel.net,
	 sboyd@kernel.org, dinguyen@kernel.org, bristot@redhat.com,
	 alexander.shishkin@linux.intel.com, fweisbec@gmail.com,
	lpieralisi@kernel.org,  atishp@atishpatra.org,
	linux@rasmusvillemoes.dk, kasan-dev@googlegroups.com,
	 will@kernel.org, boris.ostrovsky@oracle.com, khilman@kernel.org,
	 linux-csky@vger.kernel.org, pv-drivers@vmware.com,
	 linux-snps-arc@lists.infradead.org, mgorman@suse.de,
	 jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
	ulli.kroll@googlemail.com,  linux-clk@vger.kernel.org,
	rostedt@goodmis.org, ink@jurassic.park.msu.ru,
	 bcain@quicinc.com, tsbogend@alpha.franken.de,
	linux-parisc@vger.kernel.org,  ryabinin.a.a@gmail.com,
	sudeep.holla@arm.com, shawnguo@kernel.org,  davem@davemloft.net,
	dalias@libc.org, tony@atomide.com, amakhalov@vmware.com,
	 konrad.dybcio@somainline.org, bjorn.andersson@linaro.org,
	glider@google.com,  hpa@zytor.com, sparclinux@vger.kernel.org,
	linux-hexagon@vger.kernel.org,  linux-riscv@lists.infradead.org,
	vincenzo.frascino@arm.com,  anton.ivanov@cambridgegreys.com,
	jonas@southpole.se, yury.norov@gmail.com,  richard@nod.at,
	x86@kernel.org, linux@armlinux.org.uk, mingo@redhat.com,
	 aou@eecs.berkeley.edu, hca@linux.ibm.com,
	richard.henderson@linaro.org,  stefan.kristiansson@saunalahti.fi,
	openrisc@lists.librecores.org,  acme@kernel.org,
	paul.walmsley@sifive.com, linux-tegra@vger.kernel.org,
	 namhyung@kernel.org, andriy.shevchenko@linux.intel.com,
	jpoimboe@kernel.org,  dvyukov@google.com, jgross@suse.com,
	monstr@monstr.eu,  linux-mips@vger.kernel.org,
	palmer@dabbelt.com, anup@brainfault.org,  bp@alien8.de,
	johannes@sipsolutions.net, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 12/44] cpuidle,dt: Push RCU-idle into driver
Date: Tue, 4 Oct 2022 13:43:31 +0200	[thread overview]
Message-ID: <CAPDyKFqGSt2NFe8aY=6rkp4P-WH7DCO1fmWrcXk4_5XNEvv25w@mail.gmail.com> (raw)
In-Reply-To: <CAPDyKFqTWd4W5Ofk76CtC4X43dxBTNHtmY9YzN355-vpviLsPw@mail.gmail.com>

On Tue, 4 Oct 2022 at 13:03, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Mon, 19 Sept 2022 at 12:18, Peter Zijlstra <peterz@infradead.org> wrote:
> >
> > Doing RCU-idle outside the driver, only to then temporarily enable it
> > again before going idle is daft.
> >
> > Notably: this converts all dt_init_idle_driver() and
> > __CPU_PM_CPU_IDLE_ENTER() users for they are inextrably intertwined.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

This was not (yet) my intention. Please have a look at the comments I
provided below.

Kind regards
Uffe

>
> > ---
> >  arch/arm/mach-omap2/cpuidle34xx.c    |    4 ++--
> >  drivers/acpi/processor_idle.c        |    2 ++
> >  drivers/cpuidle/cpuidle-arm.c        |    1 +
> >  drivers/cpuidle/cpuidle-big_little.c |    8 ++++++--
> >  drivers/cpuidle/cpuidle-psci.c       |    1 +
> >  drivers/cpuidle/cpuidle-qcom-spm.c   |    1 +
> >  drivers/cpuidle/cpuidle-riscv-sbi.c  |    1 +
> >  drivers/cpuidle/dt_idle_states.c     |    2 +-
> >  include/linux/cpuidle.h              |    4 ++++
> >  9 files changed, 19 insertions(+), 5 deletions(-)
> >
> > --- a/drivers/acpi/processor_idle.c
> > +++ b/drivers/acpi/processor_idle.c
> > @@ -1200,6 +1200,8 @@ static int acpi_processor_setup_lpi_stat
> >                 state->target_residency = lpi->min_residency;
> >                 if (lpi->arch_flags)
> >                         state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> > +               if (lpi->entry_method == ACPI_CSTATE_FFH)
> > +                       state->flags |= CPUIDLE_FLAG_RCU_IDLE;
>
> I assume the state index here will never be 0?
>
> If not, it may lead to that acpi_processor_ffh_lpi_enter() may trigger
> CPU_PM_CPU_IDLE_ENTER_PARAM() to call ct_cpuidle_enter|exit() for an
> idle-state that doesn't have the CPUIDLE_FLAG_RCU_IDLE bit set.
>
> >                 state->enter = acpi_idle_lpi_enter;
> >                 drv->safe_state_index = i;
> >         }
> > --- a/drivers/cpuidle/cpuidle-arm.c
> > +++ b/drivers/cpuidle/cpuidle-arm.c
> > @@ -53,6 +53,7 @@ static struct cpuidle_driver arm_idle_dr
> >          * handler for idle state index 0.
> >          */
> >         .states[0] = {
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
>
> Comparing arm64 and arm32 idle-states/idle-drivers, the $subject
> series ends up setting the CPUIDLE_FLAG_RCU_IDLE for the ARM WFI idle
> state (state zero), but only for the arm64 and psci cases (mostly
> arm64). For arm32 we would need to update the ARM_CPUIDLE_WFI_STATE
> too, as that is what most arm32 idle-drivers are using. My point is,
> the code becomes a bit inconsistent.
>
> Perhaps it's easier to avoid setting the CPUIDLE_FLAG_RCU_IDLE bit for
> all of the ARM WFI idle states, for both arm64 and arm32?
>
> >                 .enter                  = arm_enter_idle_state,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> > --- a/drivers/cpuidle/cpuidle-big_little.c
> > +++ b/drivers/cpuidle/cpuidle-big_little.c
> > @@ -64,7 +64,8 @@ static struct cpuidle_driver bl_idle_lit
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 700,
> >                 .target_residency       = 2500,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM little-cluster power down",
> >         },
> > @@ -85,7 +86,8 @@ static struct cpuidle_driver bl_idle_big
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 500,
> >                 .target_residency       = 2000,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM big-cluster power down",
> >         },
> > @@ -124,11 +126,13 @@ static int bl_enter_powerdown(struct cpu
> >                                 struct cpuidle_driver *drv, int idx)
> >  {
> >         cpu_pm_enter();
> > +       ct_idle_enter();
> >
> >         cpu_suspend(0, bl_powerdown_finisher);
> >
> >         /* signals the MCPM core that CPU is out of low power state */
> >         mcpm_cpu_powered_up();
> > +       ct_idle_exit();
> >
> >         cpu_pm_exit();
> >
> > --- a/drivers/cpuidle/cpuidle-psci.c
> > +++ b/drivers/cpuidle/cpuidle-psci.c
> > @@ -357,6 +357,7 @@ static int psci_idle_init_cpu(struct dev
> >          * PSCI idle states relies on architectural WFI to be represented as
> >          * state index 0.
> >          */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = psci_enter_idle_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/cpuidle-qcom-spm.c
> > +++ b/drivers/cpuidle/cpuidle-qcom-spm.c
> > @@ -72,6 +72,7 @@ static struct cpuidle_driver qcom_spm_id
> >         .owner = THIS_MODULE,
> >         .states[0] = {
> >                 .enter                  = spm_enter_idle_state,
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> >                 .power_usage            = UINT_MAX,
> > --- a/drivers/cpuidle/cpuidle-riscv-sbi.c
> > +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c
> > @@ -332,6 +332,7 @@ static int sbi_cpuidle_init_cpu(struct d
> >         drv->cpumask = (struct cpumask *)cpumask_of(cpu);
> >
> >         /* RISC-V architectural WFI to be represented as state index 0. */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = sbi_cpuidle_enter_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/dt_idle_states.c
> > +++ b/drivers/cpuidle/dt_idle_states.c
> > @@ -77,7 +77,7 @@ static int init_state_node(struct cpuidl
> >         if (err)
> >                 desc = state_node->name;
> >
> > -       idle_state->flags = 0;
> > +       idle_state->flags = CPUIDLE_FLAG_RCU_IDLE;
> >         if (of_property_read_bool(state_node, "local-timer-stop"))
> >                 idle_state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> >         /*
> > --- a/include/linux/cpuidle.h
> > +++ b/include/linux/cpuidle.h
> > @@ -282,14 +282,18 @@ extern s64 cpuidle_governor_latency_req(
> >         int __ret = 0;                                                  \
> >                                                                         \
> >         if (!idx) {                                                     \
> > +               ct_idle_enter();                                        \
>
> According to my comment above, we should then drop these calls to
> ct_idle_enter and ct_idle_exit() here. Right?
>
> >                 cpu_do_idle();                                          \
> > +               ct_idle_exit();                                         \
> >                 return idx;                                             \
> >         }                                                               \
> >                                                                         \
> >         if (!is_retention)                                              \
> >                 __ret =  cpu_pm_enter();                                \
> >         if (!__ret) {                                                   \
> > +               ct_idle_enter();                                        \
> >                 __ret = low_level_idle_enter(state);                    \
> > +               ct_idle_exit();                                         \
> >                 if (!is_retention)                                      \
> >                         cpu_pm_exit();                                  \
> >         }                                                               \
> >
>
> Kind regards
> Uffe

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: juri.lelli@redhat.com, rafael@kernel.org,
	catalin.marinas@arm.com, linus.walleij@linaro.org,
	bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
	agordeev@linux.ibm.com, linux-clk@vger.kernel.org,
	linux-arch@vger.kernel.org, vincent.guittot@linaro.org,
	linux-sh@vger.kernel.org, kasan-dev@googlegroups.com,
	linux-acpi@vger.kernel.org, mingo@redhat.com,
	geert@linux-m68k.org, linux-imx@nxp.com, vgupta@kernel.org,
	mattst88@gmail.com, lpieralisi@kernel.org, sammy@sammy.net,
	pmladek@suse.com, linux-pm@vger.kernel.org,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-um@lists.infradead.org, npiggin@gmail.com,
	tglx@linutronix.de, linux-omap@vger.kernel.org,
	dietmar.eggemann@arm.com, andreyknvl@gmail.com,
	gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org, senozhatsky@chromium.org,
	svens@linux.ibm.com, kernel@pengutronix.de, tj@kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	mark.rutland@arm.com, linux-ia64@vger.kernel.org,
	dave.hansen@linux.intel .com,
	virtualization@lists.linux-foundation.org,
	James.Bottomley@hansenpartnership.com, jcmvbkbc@gmail.com,
	thierry.reding@gmail.com, kernel@xen0n.name, cl@linux.com,
	linux-s390@vger.kernel.org, vschneid@redhat.com,
	john.ogness@linutronix.de, ysato@users.sourceforge.jp,
	festevam@gmail.com, deller@gmx.de, daniel.lezcano@linaro.org,
	jonathanh@nvidia.com, dennis@kernel.org, lenb@kernel.org,
	linux-xtensa@linux-xtensa.org, jolsa@kernel.org,
	gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
	sudeep.holla@arm.com, linux-m68k@lists.linux-m68k.org,
	loongarch@lists.linux.dev, shorne@gmail.com, chris@zankel.net,
	sboyd@kernel.org, dinguyen@kernel.org, bristot@redhat.com,
	chenhuacai@kernel.org, alexander.shishkin@linux.intel.com,
	fweisbec@gmail.com, mturquette@baylibre.com,
	paul.walmsley@sifive.com, linux@rasmusvillemoes.dk,
	will@kernel.org, boris.ostrovsky@oracle.com, khilman@kernel.org,
	linux-csky@vger.kernel.org, tony@atomide.com,
	linux-snps-arc@lists.infradead.org, mgorman@suse.de,
	jacob.jun. pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
	ulli.kroll@googlemail.com, rostedt@goodmis.org,
	ink@jurassic.park.msu.ru, bcain@quicinc.com,
	tsbogend@alpha.franken.de, linux-parisc@vger.kernel.org,
	anup@brainfault.org, ryabinin.a.a@gmail.com,
	linux-alpha@vger.kernel.org, shawnguo@kernel.org,
	davem@davemloft.net, dalias@libc.org, pv-drivers@vmware.com,
	hpa@zytor.com, konrad.dybcio@somainline.org,
	bjorn.andersson@linaro.org, glider@google.com,
	amakhalov@vmware.com, sparclinux@vger.kernel.org,
	linux-riscv@lists.infradead.org, vincenzo.frascino@arm.com,
	anton.ivanov@cambridgegreys.com, jonas@southpole.se,
	yury.norov@gmail.com, richard@nod.at, x86@kernel.org,
	linux@armlinux.org.uk, agross@kernel.org, aou@eecs.berkeley.edu,
	hca@linux.ibm.com, richard.henderson@linaro.org,
	stefan.kristiansson@saunalahti.fi, openrisc@lists.librecores.org,
	acme@kernel.org, atishp@atishpatra.org,
	linux-tegra@vger.kernel.org, namhyung@kernel.org,
	andriy.shevchenko@linux.intel.com, jpoimboe@kernel.org,
	dvyu kov@google.com, jgross@suse.com, monstr@monstr.eu,
	linux-mips@vger.kernel.org, palmer@dabbelt.com,
	linux-hexagon@vger.kernel.org, bp@alien8.de,
	johannes@sipsolutions.net, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 12/44] cpuidle,dt: Push RCU-idle into driver
Date: Tue, 4 Oct 2022 13:43:31 +0200	[thread overview]
Message-ID: <CAPDyKFqGSt2NFe8aY=6rkp4P-WH7DCO1fmWrcXk4_5XNEvv25w@mail.gmail.com> (raw)
In-Reply-To: <CAPDyKFqTWd4W5Ofk76CtC4X43dxBTNHtmY9YzN355-vpviLsPw@mail.gmail.com>

On Tue, 4 Oct 2022 at 13:03, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Mon, 19 Sept 2022 at 12:18, Peter Zijlstra <peterz@infradead.org> wrote:
> >
> > Doing RCU-idle outside the driver, only to then temporarily enable it
> > again before going idle is daft.
> >
> > Notably: this converts all dt_init_idle_driver() and
> > __CPU_PM_CPU_IDLE_ENTER() users for they are inextrably intertwined.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

This was not (yet) my intention. Please have a look at the comments I
provided below.

Kind regards
Uffe

>
> > ---
> >  arch/arm/mach-omap2/cpuidle34xx.c    |    4 ++--
> >  drivers/acpi/processor_idle.c        |    2 ++
> >  drivers/cpuidle/cpuidle-arm.c        |    1 +
> >  drivers/cpuidle/cpuidle-big_little.c |    8 ++++++--
> >  drivers/cpuidle/cpuidle-psci.c       |    1 +
> >  drivers/cpuidle/cpuidle-qcom-spm.c   |    1 +
> >  drivers/cpuidle/cpuidle-riscv-sbi.c  |    1 +
> >  drivers/cpuidle/dt_idle_states.c     |    2 +-
> >  include/linux/cpuidle.h              |    4 ++++
> >  9 files changed, 19 insertions(+), 5 deletions(-)
> >
> > --- a/drivers/acpi/processor_idle.c
> > +++ b/drivers/acpi/processor_idle.c
> > @@ -1200,6 +1200,8 @@ static int acpi_processor_setup_lpi_stat
> >                 state->target_residency = lpi->min_residency;
> >                 if (lpi->arch_flags)
> >                         state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> > +               if (lpi->entry_method == ACPI_CSTATE_FFH)
> > +                       state->flags |= CPUIDLE_FLAG_RCU_IDLE;
>
> I assume the state index here will never be 0?
>
> If not, it may lead to that acpi_processor_ffh_lpi_enter() may trigger
> CPU_PM_CPU_IDLE_ENTER_PARAM() to call ct_cpuidle_enter|exit() for an
> idle-state that doesn't have the CPUIDLE_FLAG_RCU_IDLE bit set.
>
> >                 state->enter = acpi_idle_lpi_enter;
> >                 drv->safe_state_index = i;
> >         }
> > --- a/drivers/cpuidle/cpuidle-arm.c
> > +++ b/drivers/cpuidle/cpuidle-arm.c
> > @@ -53,6 +53,7 @@ static struct cpuidle_driver arm_idle_dr
> >          * handler for idle state index 0.
> >          */
> >         .states[0] = {
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
>
> Comparing arm64 and arm32 idle-states/idle-drivers, the $subject
> series ends up setting the CPUIDLE_FLAG_RCU_IDLE for the ARM WFI idle
> state (state zero), but only for the arm64 and psci cases (mostly
> arm64). For arm32 we would need to update the ARM_CPUIDLE_WFI_STATE
> too, as that is what most arm32 idle-drivers are using. My point is,
> the code becomes a bit inconsistent.
>
> Perhaps it's easier to avoid setting the CPUIDLE_FLAG_RCU_IDLE bit for
> all of the ARM WFI idle states, for both arm64 and arm32?
>
> >                 .enter                  = arm_enter_idle_state,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> > --- a/drivers/cpuidle/cpuidle-big_little.c
> > +++ b/drivers/cpuidle/cpuidle-big_little.c
> > @@ -64,7 +64,8 @@ static struct cpuidle_driver bl_idle_lit
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 700,
> >                 .target_residency       = 2500,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM little-cluster power down",
> >         },
> > @@ -85,7 +86,8 @@ static struct cpuidle_driver bl_idle_big
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 500,
> >                 .target_residency       = 2000,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM big-cluster power down",
> >         },
> > @@ -124,11 +126,13 @@ static int bl_enter_powerdown(struct cpu
> >                                 struct cpuidle_driver *drv, int idx)
> >  {
> >         cpu_pm_enter();
> > +       ct_idle_enter();
> >
> >         cpu_suspend(0, bl_powerdown_finisher);
> >
> >         /* signals the MCPM core that CPU is out of low power state */
> >         mcpm_cpu_powered_up();
> > +       ct_idle_exit();
> >
> >         cpu_pm_exit();
> >
> > --- a/drivers/cpuidle/cpuidle-psci.c
> > +++ b/drivers/cpuidle/cpuidle-psci.c
> > @@ -357,6 +357,7 @@ static int psci_idle_init_cpu(struct dev
> >          * PSCI idle states relies on architectural WFI to be represented as
> >          * state index 0.
> >          */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = psci_enter_idle_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/cpuidle-qcom-spm.c
> > +++ b/drivers/cpuidle/cpuidle-qcom-spm.c
> > @@ -72,6 +72,7 @@ static struct cpuidle_driver qcom_spm_id
> >         .owner = THIS_MODULE,
> >         .states[0] = {
> >                 .enter                  = spm_enter_idle_state,
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> >                 .power_usage            = UINT_MAX,
> > --- a/drivers/cpuidle/cpuidle-riscv-sbi.c
> > +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c
> > @@ -332,6 +332,7 @@ static int sbi_cpuidle_init_cpu(struct d
> >         drv->cpumask = (struct cpumask *)cpumask_of(cpu);
> >
> >         /* RISC-V architectural WFI to be represented as state index 0. */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = sbi_cpuidle_enter_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/dt_idle_states.c
> > +++ b/drivers/cpuidle/dt_idle_states.c
> > @@ -77,7 +77,7 @@ static int init_state_node(struct cpuidl
> >         if (err)
> >                 desc = state_node->name;
> >
> > -       idle_state->flags = 0;
> > +       idle_state->flags = CPUIDLE_FLAG_RCU_IDLE;
> >         if (of_property_read_bool(state_node, "local-timer-stop"))
> >                 idle_state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> >         /*
> > --- a/include/linux/cpuidle.h
> > +++ b/include/linux/cpuidle.h
> > @@ -282,14 +282,18 @@ extern s64 cpuidle_governor_latency_req(
> >         int __ret = 0;                                                  \
> >                                                                         \
> >         if (!idx) {                                                     \
> > +               ct_idle_enter();                                        \
>
> According to my comment above, we should then drop these calls to
> ct_idle_enter and ct_idle_exit() here. Right?
>
> >                 cpu_do_idle();                                          \
> > +               ct_idle_exit();                                         \
> >                 return idx;                                             \
> >         }                                                               \
> >                                                                         \
> >         if (!is_retention)                                              \
> >                 __ret =  cpu_pm_enter();                                \
> >         if (!__ret) {                                                   \
> > +               ct_idle_enter();                                        \
> >                 __ret = low_level_idle_enter(state);                    \
> > +               ct_idle_exit();                                         \
> >                 if (!is_retention)                                      \
> >                         cpu_pm_exit();                                  \
> >         }                                                               \
> >
>
> Kind regards
> Uffe

WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: juri.lelli@redhat.com, rafael@kernel.org,
	catalin.marinas@arm.com, linus.walleij@linaro.org,
	bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
	agordeev@linux.ibm.com, linux-clk@vger.kernel.org,
	linux-arch@vger.kernel.org, vincent.guittot@linaro.org,
	mpe@ellerman.id.au, linux-sh@vger.kernel.org,
	kasan-dev@googlegroups.com, linux-acpi@vger.kernel.org,
	mingo@redhat.com, linux-imx@nxp.com, vgupta@kernel.org,
	mattst88@gmail.com, lpieralisi@kernel.org, sammy@sammy.net,
	pmladek@suse.com, linux-pm@vger.kernel.org,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-um@lists.infradead.org, npiggin@gmail.com,
	tglx@linutronix.de, linux-omap@vger.kernel.org,
	dietmar.eggemann@arm.com, andreyknvl@gmail.com,
	gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org, senozhatsky@chromium.org,
	svens@linux.ibm.com, kernel@pengutronix.de, tj@kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	mark.rutland@arm.com, linux-ia64@vger.kernel.org,
	dave.hansen@linux.intel.com,
	virtualization@lists.linux-foundation.org,
	James.Bottomley@hansenpartnership.com, jcmvbkbc@gmail.com,
	thierry.reding@gmail.com, kernel@xen0n.name, cl@linux.com,
	linux-s390@vger.kernel.org, vschneid@redhat.com,
	john.ogness@linutronix.de, ysato@users.sourceforge.jp,
	festevam@gmail.com, deller@gmx.de, daniel.lezcano@linaro.org,
	jonathanh@nvidia.com, dennis@kernel.org, lenb@kernel.org,
	linux-xtensa@linux-xtensa.org, jolsa@kernel.org,
	gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
	sudeep.holla@arm.com, linux-m68k@lists.linux-m68k.org,
	loongarch@lists.linux.dev, chris@zankel.net, sboyd@kernel.org,
	dinguyen@kernel.org, bristot@redhat.com, chenhuacai@kernel.org,
	alexander.shishkin@linux.intel.com, fweisbec@gmail.com,
	mturquette@baylibre.com, paul.walmsley@sifive.com,
	linux@rasmusvillemoes.dk, christophe.leroy@csgroup.eu,
	will@kernel.org, boris.ostrovsky@oracle.com, khilman@kernel.org,
	linux-csky@vger.kernel.org, tony@atomide.com,
	linux-snps-arc@lists.infradead.org, mgorman@suse.de,
	jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
	ulli.kroll@googlemail.com, rostedt@goodmis.org,
	ink@jurassic.park.msu.ru, bcain@quicinc.com,
	tsbogend@alpha.franken.de, linux-parisc@vger.kernel.org,
	anup@brainfault.org, ryabinin.a.a@gmail.com,
	linux-alpha@vger.kernel.org, shawnguo@kernel.org,
	davem@davemloft.net, dalias@libc.org, pv-drivers@vmware.com,
	hpa@zytor.com, konrad.dybcio@somainline.org,
	bjorn.andersson@linaro.org, glider@google.com,
	amakhalov@vmware.com, sparclinux@vger.kernel.org,
	linux-riscv@lists.infradead.org, vincenzo.frascino@arm.com,
	anton.ivanov@cambridgegreys.com, jonas@southpole.se,
	yury.norov@gmail.com, richard@nod.at, x86@kernel.org,
	linux@armlinux.org.uk, agross@kernel.org, aou@eecs.berkeley.edu,
	hca@linux.ibm.com, richard.henderson@linaro.org,
	openrisc@lists.librecores.org, acme@kernel.org,
	atishp@atishpatra.org, linux-tegra@vger.kernel.org,
	namhyung@kernel.org, andriy.shevchenko@linux.intel.com,
	jpoimboe@kernel.org, dvyukov@google.com, jgross@suse.com,
	monstr@monstr.eu, linux-mips@vger.kernel.org, palmer@dabbelt.com,
	linux-hexagon@vger.kernel.org, bp@alien8.de,
	johannes@sipsolutions.net, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 12/44] cpuidle,dt: Push RCU-idle into driver
Date: Tue, 4 Oct 2022 13:43:31 +0200	[thread overview]
Message-ID: <CAPDyKFqGSt2NFe8aY=6rkp4P-WH7DCO1fmWrcXk4_5XNEvv25w@mail.gmail.com> (raw)
In-Reply-To: <CAPDyKFqTWd4W5Ofk76CtC4X43dxBTNHtmY9YzN355-vpviLsPw@mail.gmail.com>

On Tue, 4 Oct 2022 at 13:03, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Mon, 19 Sept 2022 at 12:18, Peter Zijlstra <peterz@infradead.org> wrote:
> >
> > Doing RCU-idle outside the driver, only to then temporarily enable it
> > again before going idle is daft.
> >
> > Notably: this converts all dt_init_idle_driver() and
> > __CPU_PM_CPU_IDLE_ENTER() users for they are inextrably intertwined.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

This was not (yet) my intention. Please have a look at the comments I
provided below.

Kind regards
Uffe

>
> > ---
> >  arch/arm/mach-omap2/cpuidle34xx.c    |    4 ++--
> >  drivers/acpi/processor_idle.c        |    2 ++
> >  drivers/cpuidle/cpuidle-arm.c        |    1 +
> >  drivers/cpuidle/cpuidle-big_little.c |    8 ++++++--
> >  drivers/cpuidle/cpuidle-psci.c       |    1 +
> >  drivers/cpuidle/cpuidle-qcom-spm.c   |    1 +
> >  drivers/cpuidle/cpuidle-riscv-sbi.c  |    1 +
> >  drivers/cpuidle/dt_idle_states.c     |    2 +-
> >  include/linux/cpuidle.h              |    4 ++++
> >  9 files changed, 19 insertions(+), 5 deletions(-)
> >
> > --- a/drivers/acpi/processor_idle.c
> > +++ b/drivers/acpi/processor_idle.c
> > @@ -1200,6 +1200,8 @@ static int acpi_processor_setup_lpi_stat
> >                 state->target_residency = lpi->min_residency;
> >                 if (lpi->arch_flags)
> >                         state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> > +               if (lpi->entry_method == ACPI_CSTATE_FFH)
> > +                       state->flags |= CPUIDLE_FLAG_RCU_IDLE;
>
> I assume the state index here will never be 0?
>
> If not, it may lead to that acpi_processor_ffh_lpi_enter() may trigger
> CPU_PM_CPU_IDLE_ENTER_PARAM() to call ct_cpuidle_enter|exit() for an
> idle-state that doesn't have the CPUIDLE_FLAG_RCU_IDLE bit set.
>
> >                 state->enter = acpi_idle_lpi_enter;
> >                 drv->safe_state_index = i;
> >         }
> > --- a/drivers/cpuidle/cpuidle-arm.c
> > +++ b/drivers/cpuidle/cpuidle-arm.c
> > @@ -53,6 +53,7 @@ static struct cpuidle_driver arm_idle_dr
> >          * handler for idle state index 0.
> >          */
> >         .states[0] = {
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
>
> Comparing arm64 and arm32 idle-states/idle-drivers, the $subject
> series ends up setting the CPUIDLE_FLAG_RCU_IDLE for the ARM WFI idle
> state (state zero), but only for the arm64 and psci cases (mostly
> arm64). For arm32 we would need to update the ARM_CPUIDLE_WFI_STATE
> too, as that is what most arm32 idle-drivers are using. My point is,
> the code becomes a bit inconsistent.
>
> Perhaps it's easier to avoid setting the CPUIDLE_FLAG_RCU_IDLE bit for
> all of the ARM WFI idle states, for both arm64 and arm32?
>
> >                 .enter                  = arm_enter_idle_state,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> > --- a/drivers/cpuidle/cpuidle-big_little.c
> > +++ b/drivers/cpuidle/cpuidle-big_little.c
> > @@ -64,7 +64,8 @@ static struct cpuidle_driver bl_idle_lit
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 700,
> >                 .target_residency       = 2500,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM little-cluster power down",
> >         },
> > @@ -85,7 +86,8 @@ static struct cpuidle_driver bl_idle_big
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 500,
> >                 .target_residency       = 2000,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM big-cluster power down",
> >         },
> > @@ -124,11 +126,13 @@ static int bl_enter_powerdown(struct cpu
> >                                 struct cpuidle_driver *drv, int idx)
> >  {
> >         cpu_pm_enter();
> > +       ct_idle_enter();
> >
> >         cpu_suspend(0, bl_powerdown_finisher);
> >
> >         /* signals the MCPM core that CPU is out of low power state */
> >         mcpm_cpu_powered_up();
> > +       ct_idle_exit();
> >
> >         cpu_pm_exit();
> >
> > --- a/drivers/cpuidle/cpuidle-psci.c
> > +++ b/drivers/cpuidle/cpuidle-psci.c
> > @@ -357,6 +357,7 @@ static int psci_idle_init_cpu(struct dev
> >          * PSCI idle states relies on architectural WFI to be represented as
> >          * state index 0.
> >          */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = psci_enter_idle_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/cpuidle-qcom-spm.c
> > +++ b/drivers/cpuidle/cpuidle-qcom-spm.c
> > @@ -72,6 +72,7 @@ static struct cpuidle_driver qcom_spm_id
> >         .owner = THIS_MODULE,
> >         .states[0] = {
> >                 .enter                  = spm_enter_idle_state,
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> >                 .power_usage            = UINT_MAX,
> > --- a/drivers/cpuidle/cpuidle-riscv-sbi.c
> > +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c
> > @@ -332,6 +332,7 @@ static int sbi_cpuidle_init_cpu(struct d
> >         drv->cpumask = (struct cpumask *)cpumask_of(cpu);
> >
> >         /* RISC-V architectural WFI to be represented as state index 0. */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = sbi_cpuidle_enter_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/dt_idle_states.c
> > +++ b/drivers/cpuidle/dt_idle_states.c
> > @@ -77,7 +77,7 @@ static int init_state_node(struct cpuidl
> >         if (err)
> >                 desc = state_node->name;
> >
> > -       idle_state->flags = 0;
> > +       idle_state->flags = CPUIDLE_FLAG_RCU_IDLE;
> >         if (of_property_read_bool(state_node, "local-timer-stop"))
> >                 idle_state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> >         /*
> > --- a/include/linux/cpuidle.h
> > +++ b/include/linux/cpuidle.h
> > @@ -282,14 +282,18 @@ extern s64 cpuidle_governor_latency_req(
> >         int __ret = 0;                                                  \
> >                                                                         \
> >         if (!idx) {                                                     \
> > +               ct_idle_enter();                                        \
>
> According to my comment above, we should then drop these calls to
> ct_idle_enter and ct_idle_exit() here. Right?
>
> >                 cpu_do_idle();                                          \
> > +               ct_idle_exit();                                         \
> >                 return idx;                                             \
> >         }                                                               \
> >                                                                         \
> >         if (!is_retention)                                              \
> >                 __ret =  cpu_pm_enter();                                \
> >         if (!__ret) {                                                   \
> > +               ct_idle_enter();                                        \
> >                 __ret = low_level_idle_enter(state);                    \
> > +               ct_idle_exit();                                         \
> >                 if (!is_retention)                                      \
> >                         cpu_pm_exit();                                  \
> >         }                                                               \
> >
>
> Kind regards
> Uffe

WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: juri.lelli@redhat.com, rafael@kernel.org,
	catalin.marinas@arm.com, linus.walleij@linaro.org,
	bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
	agordeev@linux.ibm.com, linux-arch@vger.kernel.org,
	vincent.guittot@linaro.org, mpe@ellerman.id.au,
	chenhuacai@kernel.org, christophe.leroy@csgroup.eu,
	linux-acpi@vger.kernel.org, agross@kernel.org,
	geert@linux-m68k.org, linux-imx@nxp.com, vgupta@kernel.org,
	mattst88@gmail.com, mturquette@baylibre.com, sammy@sammy.net,
	pmladek@suse.com, linux-pm@vger.kernel.org,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-um@lists.infradead.org, npiggin@gmail.com,
	tglx@linutronix.de, linux-omap@vger.kernel.org,
	dietmar.eggemann@arm.com, andreyknvl@gmail.com,
	gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org, senozhatsky@chromium.org,
	svens@linux.ibm.com, jolsa@kernel.org, tj@kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	mark.rutland@arm.com, linux-ia64@vger.kernel.org,
	dave.hansen@linux.intel.com,
	virtualization@lists.linux-foundation.org,
	James.Bottomley@hansenpartnership.com, jcmvbkbc@gmail.com,
	thierry.reding@gmail.com, kernel@xen0n.name, cl@linux.com,
	linux-s390@vger.kernel.org, vschneid@redhat.com,
	john.ogness@linutronix.de, ysato@users.sourceforge.jp,
	linux-sh@vger.kernel.org, festevam@gmail.com, deller@gmx.de,
	daniel.lezcano@linaro.org, jonathanh@nvidia.com,
	dennis@kernel.org, lenb@kernel.org,
	linux-xtensa@linux-xtensa.org, kernel@pengutronix.de,
	gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
	linux-alpha@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	loongarch@lists.linux.dev, shorne@gmail.com, chris@zankel.net,
	sboyd@kernel.org, dinguyen@kernel.org, bristot@redhat.com,
	alexander.shishkin@linux.intel.com, fweisbec@gmail.com,
	lpieralisi@kernel.org, atishp@atishpatra.org,
	linux@rasmusvillemoes.dk, kasan-dev@googlegroups.com,
	will@kernel.org, boris.ostrovsky@oracle.com, khilman@kernel.org,
	linux-csky@vger.kernel.org, pv-drivers@vmware.com,
	linux-snps-arc@lists.infradead.org, mgorman@suse.de,
	jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
	ulli.kroll@googlemail.com, linux-clk@vger.kernel.org,
	rostedt@goodmis.org, ink@jurassic.park.msu.ru, bcain@quicinc.com,
	tsbogend@alpha.franken.de, linux-parisc@vger.kernel.org,
	ryabinin.a.a@gmail.com, sudeep.holla@arm.com,
	shawnguo@kernel.org, davem@davemloft.net, dalias@libc.org,
	tony@atomide.com, amakhalov@vmware.com,
	konrad.dybcio@somainline.org, bjorn.andersson@linaro.org,
	glider@google.com, hpa@zytor.com, sparclinux@vger.kernel.org,
	linux-hexagon@vger.kernel.org, linux-riscv@lists.infradead.org,
	vincenzo.frascino@arm.com, anton.ivanov@cambridgegreys.com,
	jonas@southpole.se, yury.norov@gmail.com, richard@nod.at,
	x86@kernel.org, linux@armlinux.org.uk, mingo@redhat.com,
	aou@eecs.berkeley.edu, hca@linux.ibm.com,
	richard.henderson@linaro.org, stefan.kristiansson@saunalahti.fi,
	openrisc@lists.librecores.org, acme@kernel.org,
	paul.walmsley@sifive.com, linux-tegra@vger.kernel.org,
	namhyung@kernel.org, andriy.shevchenko@linux.intel.com,
	jpoimboe@kernel.org, dvyukov@google.com, jgross@suse.com,
	monstr@monstr.eu, linux-mips@vger.kernel.org, palmer@dabbelt.com,
	anup@brainfault.org, bp@alien8.de, johannes@sipsolutions.net,
	linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 12/44] cpuidle,dt: Push RCU-idle into driver
Date: Tue, 04 Oct 2022 11:43:31 +0000	[thread overview]
Message-ID: <CAPDyKFqGSt2NFe8aY=6rkp4P-WH7DCO1fmWrcXk4_5XNEvv25w@mail.gmail.com> (raw)
In-Reply-To: <CAPDyKFqTWd4W5Ofk76CtC4X43dxBTNHtmY9YzN355-vpviLsPw@mail.gmail.com>

On Tue, 4 Oct 2022 at 13:03, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Mon, 19 Sept 2022 at 12:18, Peter Zijlstra <peterz@infradead.org> wrote:
> >
> > Doing RCU-idle outside the driver, only to then temporarily enable it
> > again before going idle is daft.
> >
> > Notably: this converts all dt_init_idle_driver() and
> > __CPU_PM_CPU_IDLE_ENTER() users for they are inextrably intertwined.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

This was not (yet) my intention. Please have a look at the comments I
provided below.

Kind regards
Uffe

>
> > ---
> >  arch/arm/mach-omap2/cpuidle34xx.c    |    4 ++--
> >  drivers/acpi/processor_idle.c        |    2 ++
> >  drivers/cpuidle/cpuidle-arm.c        |    1 +
> >  drivers/cpuidle/cpuidle-big_little.c |    8 ++++++--
> >  drivers/cpuidle/cpuidle-psci.c       |    1 +
> >  drivers/cpuidle/cpuidle-qcom-spm.c   |    1 +
> >  drivers/cpuidle/cpuidle-riscv-sbi.c  |    1 +
> >  drivers/cpuidle/dt_idle_states.c     |    2 +-
> >  include/linux/cpuidle.h              |    4 ++++
> >  9 files changed, 19 insertions(+), 5 deletions(-)
> >
> > --- a/drivers/acpi/processor_idle.c
> > +++ b/drivers/acpi/processor_idle.c
> > @@ -1200,6 +1200,8 @@ static int acpi_processor_setup_lpi_stat
> >                 state->target_residency = lpi->min_residency;
> >                 if (lpi->arch_flags)
> >                         state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> > +               if (lpi->entry_method = ACPI_CSTATE_FFH)
> > +                       state->flags |= CPUIDLE_FLAG_RCU_IDLE;
>
> I assume the state index here will never be 0?
>
> If not, it may lead to that acpi_processor_ffh_lpi_enter() may trigger
> CPU_PM_CPU_IDLE_ENTER_PARAM() to call ct_cpuidle_enter|exit() for an
> idle-state that doesn't have the CPUIDLE_FLAG_RCU_IDLE bit set.
>
> >                 state->enter = acpi_idle_lpi_enter;
> >                 drv->safe_state_index = i;
> >         }
> > --- a/drivers/cpuidle/cpuidle-arm.c
> > +++ b/drivers/cpuidle/cpuidle-arm.c
> > @@ -53,6 +53,7 @@ static struct cpuidle_driver arm_idle_dr
> >          * handler for idle state index 0.
> >          */
> >         .states[0] = {
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
>
> Comparing arm64 and arm32 idle-states/idle-drivers, the $subject
> series ends up setting the CPUIDLE_FLAG_RCU_IDLE for the ARM WFI idle
> state (state zero), but only for the arm64 and psci cases (mostly
> arm64). For arm32 we would need to update the ARM_CPUIDLE_WFI_STATE
> too, as that is what most arm32 idle-drivers are using. My point is,
> the code becomes a bit inconsistent.
>
> Perhaps it's easier to avoid setting the CPUIDLE_FLAG_RCU_IDLE bit for
> all of the ARM WFI idle states, for both arm64 and arm32?
>
> >                 .enter                  = arm_enter_idle_state,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> > --- a/drivers/cpuidle/cpuidle-big_little.c
> > +++ b/drivers/cpuidle/cpuidle-big_little.c
> > @@ -64,7 +64,8 @@ static struct cpuidle_driver bl_idle_lit
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 700,
> >                 .target_residency       = 2500,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM little-cluster power down",
> >         },
> > @@ -85,7 +86,8 @@ static struct cpuidle_driver bl_idle_big
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 500,
> >                 .target_residency       = 2000,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM big-cluster power down",
> >         },
> > @@ -124,11 +126,13 @@ static int bl_enter_powerdown(struct cpu
> >                                 struct cpuidle_driver *drv, int idx)
> >  {
> >         cpu_pm_enter();
> > +       ct_idle_enter();
> >
> >         cpu_suspend(0, bl_powerdown_finisher);
> >
> >         /* signals the MCPM core that CPU is out of low power state */
> >         mcpm_cpu_powered_up();
> > +       ct_idle_exit();
> >
> >         cpu_pm_exit();
> >
> > --- a/drivers/cpuidle/cpuidle-psci.c
> > +++ b/drivers/cpuidle/cpuidle-psci.c
> > @@ -357,6 +357,7 @@ static int psci_idle_init_cpu(struct dev
> >          * PSCI idle states relies on architectural WFI to be represented as
> >          * state index 0.
> >          */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = psci_enter_idle_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/cpuidle-qcom-spm.c
> > +++ b/drivers/cpuidle/cpuidle-qcom-spm.c
> > @@ -72,6 +72,7 @@ static struct cpuidle_driver qcom_spm_id
> >         .owner = THIS_MODULE,
> >         .states[0] = {
> >                 .enter                  = spm_enter_idle_state,
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> >                 .power_usage            = UINT_MAX,
> > --- a/drivers/cpuidle/cpuidle-riscv-sbi.c
> > +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c
> > @@ -332,6 +332,7 @@ static int sbi_cpuidle_init_cpu(struct d
> >         drv->cpumask = (struct cpumask *)cpumask_of(cpu);
> >
> >         /* RISC-V architectural WFI to be represented as state index 0. */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = sbi_cpuidle_enter_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/dt_idle_states.c
> > +++ b/drivers/cpuidle/dt_idle_states.c
> > @@ -77,7 +77,7 @@ static int init_state_node(struct cpuidl
> >         if (err)
> >                 desc = state_node->name;
> >
> > -       idle_state->flags = 0;
> > +       idle_state->flags = CPUIDLE_FLAG_RCU_IDLE;
> >         if (of_property_read_bool(state_node, "local-timer-stop"))
> >                 idle_state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> >         /*
> > --- a/include/linux/cpuidle.h
> > +++ b/include/linux/cpuidle.h
> > @@ -282,14 +282,18 @@ extern s64 cpuidle_governor_latency_req(
> >         int __ret = 0;                                                  \
> >                                                                         \
> >         if (!idx) {                                                     \
> > +               ct_idle_enter();                                        \
>
> According to my comment above, we should then drop these calls to
> ct_idle_enter and ct_idle_exit() here. Right?
>
> >                 cpu_do_idle();                                          \
> > +               ct_idle_exit();                                         \
> >                 return idx;                                             \
> >         }                                                               \
> >                                                                         \
> >         if (!is_retention)                                              \
> >                 __ret =  cpu_pm_enter();                                \
> >         if (!__ret) {                                                   \
> > +               ct_idle_enter();                                        \
> >                 __ret = low_level_idle_enter(state);                    \
> > +               ct_idle_exit();                                         \
> >                 if (!is_retention)                                      \
> >                         cpu_pm_exit();                                  \
> >         }                                                               \
> >
>
> Kind regards
> Uffe

WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: juri.lelli@redhat.com, rafael@kernel.org,
	catalin.marinas@arm.com, linus.walleij@linaro.org,
	bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
	agordeev@linux.ibm.com, linux-arch@vger.kernel.org,
	vincent.guittot@linaro.org, mpe@ellerman.id.au,
	chenhuacai@kernel.org, christophe.leroy@csgroup.eu,
	linux-acpi@vger.kernel.org, agross@kernel.org,
	geert@linux-m68k.org, linux-imx@nxp.com, vgupta@kernel.org,
	mattst88@gmail.com, mturquette@baylibre.com, sammy@sammy.net,
	pmladek@suse.com, linux-pm@vger.kernel.org,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-um@lists.infradead.org, npiggin@gmail.com,
	tglx@linutronix.de, linux-omap@vger.kernel.org,
	dietmar.eggemann@arm.com, andreyknvl@gmail.com,
	gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.or
Subject: Re: [PATCH v2 12/44] cpuidle,dt: Push RCU-idle into driver
Date: Tue, 4 Oct 2022 13:43:31 +0200	[thread overview]
Message-ID: <CAPDyKFqGSt2NFe8aY=6rkp4P-WH7DCO1fmWrcXk4_5XNEvv25w@mail.gmail.com> (raw)
In-Reply-To: <CAPDyKFqTWd4W5Ofk76CtC4X43dxBTNHtmY9YzN355-vpviLsPw@mail.gmail.com>

On Tue, 4 Oct 2022 at 13:03, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Mon, 19 Sept 2022 at 12:18, Peter Zijlstra <peterz@infradead.org> wrote:
> >
> > Doing RCU-idle outside the driver, only to then temporarily enable it
> > again before going idle is daft.
> >
> > Notably: this converts all dt_init_idle_driver() and
> > __CPU_PM_CPU_IDLE_ENTER() users for they are inextrably intertwined.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

This was not (yet) my intention. Please have a look at the comments I
provided below.

Kind regards
Uffe

>
> > ---
> >  arch/arm/mach-omap2/cpuidle34xx.c    |    4 ++--
> >  drivers/acpi/processor_idle.c        |    2 ++
> >  drivers/cpuidle/cpuidle-arm.c        |    1 +
> >  drivers/cpuidle/cpuidle-big_little.c |    8 ++++++--
> >  drivers/cpuidle/cpuidle-psci.c       |    1 +
> >  drivers/cpuidle/cpuidle-qcom-spm.c   |    1 +
> >  drivers/cpuidle/cpuidle-riscv-sbi.c  |    1 +
> >  drivers/cpuidle/dt_idle_states.c     |    2 +-
> >  include/linux/cpuidle.h              |    4 ++++
> >  9 files changed, 19 insertions(+), 5 deletions(-)
> >
> > --- a/drivers/acpi/processor_idle.c
> > +++ b/drivers/acpi/processor_idle.c
> > @@ -1200,6 +1200,8 @@ static int acpi_processor_setup_lpi_stat
> >                 state->target_residency = lpi->min_residency;
> >                 if (lpi->arch_flags)
> >                         state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> > +               if (lpi->entry_method == ACPI_CSTATE_FFH)
> > +                       state->flags |= CPUIDLE_FLAG_RCU_IDLE;
>
> I assume the state index here will never be 0?
>
> If not, it may lead to that acpi_processor_ffh_lpi_enter() may trigger
> CPU_PM_CPU_IDLE_ENTER_PARAM() to call ct_cpuidle_enter|exit() for an
> idle-state that doesn't have the CPUIDLE_FLAG_RCU_IDLE bit set.
>
> >                 state->enter = acpi_idle_lpi_enter;
> >                 drv->safe_state_index = i;
> >         }
> > --- a/drivers/cpuidle/cpuidle-arm.c
> > +++ b/drivers/cpuidle/cpuidle-arm.c
> > @@ -53,6 +53,7 @@ static struct cpuidle_driver arm_idle_dr
> >          * handler for idle state index 0.
> >          */
> >         .states[0] = {
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
>
> Comparing arm64 and arm32 idle-states/idle-drivers, the $subject
> series ends up setting the CPUIDLE_FLAG_RCU_IDLE for the ARM WFI idle
> state (state zero), but only for the arm64 and psci cases (mostly
> arm64). For arm32 we would need to update the ARM_CPUIDLE_WFI_STATE
> too, as that is what most arm32 idle-drivers are using. My point is,
> the code becomes a bit inconsistent.
>
> Perhaps it's easier to avoid setting the CPUIDLE_FLAG_RCU_IDLE bit for
> all of the ARM WFI idle states, for both arm64 and arm32?
>
> >                 .enter                  = arm_enter_idle_state,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> > --- a/drivers/cpuidle/cpuidle-big_little.c
> > +++ b/drivers/cpuidle/cpuidle-big_little.c
> > @@ -64,7 +64,8 @@ static struct cpuidle_driver bl_idle_lit
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 700,
> >                 .target_residency       = 2500,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM little-cluster power down",
> >         },
> > @@ -85,7 +86,8 @@ static struct cpuidle_driver bl_idle_big
> >                 .enter                  = bl_enter_powerdown,
> >                 .exit_latency           = 500,
> >                 .target_residency       = 2000,
> > -               .flags                  = CPUIDLE_FLAG_TIMER_STOP,
> > +               .flags                  = CPUIDLE_FLAG_TIMER_STOP |
> > +                                         CPUIDLE_FLAG_RCU_IDLE,
> >                 .name                   = "C1",
> >                 .desc                   = "ARM big-cluster power down",
> >         },
> > @@ -124,11 +126,13 @@ static int bl_enter_powerdown(struct cpu
> >                                 struct cpuidle_driver *drv, int idx)
> >  {
> >         cpu_pm_enter();
> > +       ct_idle_enter();
> >
> >         cpu_suspend(0, bl_powerdown_finisher);
> >
> >         /* signals the MCPM core that CPU is out of low power state */
> >         mcpm_cpu_powered_up();
> > +       ct_idle_exit();
> >
> >         cpu_pm_exit();
> >
> > --- a/drivers/cpuidle/cpuidle-psci.c
> > +++ b/drivers/cpuidle/cpuidle-psci.c
> > @@ -357,6 +357,7 @@ static int psci_idle_init_cpu(struct dev
> >          * PSCI idle states relies on architectural WFI to be represented as
> >          * state index 0.
> >          */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = psci_enter_idle_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/cpuidle-qcom-spm.c
> > +++ b/drivers/cpuidle/cpuidle-qcom-spm.c
> > @@ -72,6 +72,7 @@ static struct cpuidle_driver qcom_spm_id
> >         .owner = THIS_MODULE,
> >         .states[0] = {
> >                 .enter                  = spm_enter_idle_state,
> > +               .flags                  = CPUIDLE_FLAG_RCU_IDLE,
> >                 .exit_latency           = 1,
> >                 .target_residency       = 1,
> >                 .power_usage            = UINT_MAX,
> > --- a/drivers/cpuidle/cpuidle-riscv-sbi.c
> > +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c
> > @@ -332,6 +332,7 @@ static int sbi_cpuidle_init_cpu(struct d
> >         drv->cpumask = (struct cpumask *)cpumask_of(cpu);
> >
> >         /* RISC-V architectural WFI to be represented as state index 0. */
> > +       drv->states[0].flags = CPUIDLE_FLAG_RCU_IDLE;
> >         drv->states[0].enter = sbi_cpuidle_enter_state;
> >         drv->states[0].exit_latency = 1;
> >         drv->states[0].target_residency = 1;
> > --- a/drivers/cpuidle/dt_idle_states.c
> > +++ b/drivers/cpuidle/dt_idle_states.c
> > @@ -77,7 +77,7 @@ static int init_state_node(struct cpuidl
> >         if (err)
> >                 desc = state_node->name;
> >
> > -       idle_state->flags = 0;
> > +       idle_state->flags = CPUIDLE_FLAG_RCU_IDLE;
> >         if (of_property_read_bool(state_node, "local-timer-stop"))
> >                 idle_state->flags |= CPUIDLE_FLAG_TIMER_STOP;
> >         /*
> > --- a/include/linux/cpuidle.h
> > +++ b/include/linux/cpuidle.h
> > @@ -282,14 +282,18 @@ extern s64 cpuidle_governor_latency_req(
> >         int __ret = 0;                                                  \
> >                                                                         \
> >         if (!idx) {                                                     \
> > +               ct_idle_enter();                                        \
>
> According to my comment above, we should then drop these calls to
> ct_idle_enter and ct_idle_exit() here. Right?
>
> >                 cpu_do_idle();                                          \
> > +               ct_idle_exit();                                         \
> >                 return idx;                                             \
> >         }                                                               \
> >                                                                         \
> >         if (!is_retention)                                              \
> >                 __ret =  cpu_pm_enter();                                \
> >         if (!__ret) {                                                   \
> > +               ct_idle_enter();                                        \
> >                 __ret = low_level_idle_enter(state);                    \
> > +               ct_idle_exit();                                         \
> >                 if (!is_retention)                                      \
> >                         cpu_pm_exit();                                  \
> >         }                                                               \
> >
>
> Kind regards
> Uffe

  reply	other threads:[~2022-10-04 11:44 UTC|newest]

Thread overview: 675+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-19  9:59 [PATCH v2 00/44] cpuidle,rcu: Clean up the mess Peter Zijlstra
2022-09-19  9:59 ` Peter Zijlstra
2022-09-19  9:59 ` Peter Zijlstra
2022-09-19  9:59 ` Peter Zijlstra
2022-09-19  9:59 ` Peter Zijlstra
2022-09-19  9:59 ` Peter Zijlstra
2022-09-19  9:59 ` Peter Zijlstra
2022-09-19  9:59 ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 01/44] x86/perf/amd: Remove tracing from perf_lopwr_cb() Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 02/44] x86/idle: Replace x86_idle with a static_call Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 03/44] cpuidle/poll: Ensure IRQ state is invariant Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19 13:19   ` Frederic Weisbecker
2022-09-19 13:19     ` Frederic Weisbecker
2022-09-19 13:19     ` Frederic Weisbecker
2022-09-19 13:19     ` Frederic Weisbecker
2022-09-19 13:19     ` Frederic Weisbecker
2022-09-19 13:19     ` Frederic Weisbecker
2022-09-20  8:57     ` Peter Zijlstra
2022-09-20  8:57       ` Peter Zijlstra
2022-09-20  8:57       ` Peter Zijlstra
2022-09-20  8:57       ` Peter Zijlstra
2022-09-20  8:57       ` Peter Zijlstra
2022-09-20  8:57       ` Peter Zijlstra
2022-09-20  8:57       ` Peter Zijlstra
2022-09-20  8:57       ` Peter Zijlstra
2022-09-20 10:43       ` Frederic Weisbecker
2022-09-20 10:43         ` Frederic Weisbecker
2022-09-20 10:43         ` Frederic Weisbecker
2022-09-20 10:43         ` Frederic Weisbecker
2022-09-20 10:43         ` Frederic Weisbecker
2022-09-20 10:43         ` Frederic Weisbecker
2022-09-20 10:43         ` Frederic Weisbecker
2022-09-19  9:59 ` [PATCH v2 04/44] cpuidle: Move IRQ state validation Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 05/44] cpuidle,riscv: Push RCU-idle into driver Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19 11:51   ` Anup Patel
2022-09-19 11:54     ` Anup Patel
2022-09-19 11:54     ` Anup Patel
2022-09-19 11:54     ` Anup Patel
2022-09-19 11:54     ` Anup Patel
2022-09-19 11:54     ` Anup Patel
2022-09-19 11:54     ` Anup Patel
2022-09-19 11:54     ` Anup Patel
2022-09-19 13:46   ` Frederic Weisbecker
2022-09-19 13:46     ` Frederic Weisbecker
2022-09-19 13:46     ` Frederic Weisbecker
2022-09-19 13:46     ` Frederic Weisbecker
2022-09-19 13:46     ` Frederic Weisbecker
2022-09-19 13:46     ` Frederic Weisbecker
2022-09-19  9:59 ` [PATCH v2 06/44] cpuidle,tegra: " Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19 14:05   ` Frederic Weisbecker
2022-09-19 14:05     ` Frederic Weisbecker
2022-09-19 14:05     ` Frederic Weisbecker
2022-09-19 14:05     ` Frederic Weisbecker
2022-09-19 14:05     ` Frederic Weisbecker
2022-09-19 14:05     ` Frederic Weisbecker
2022-09-19  9:59 ` [PATCH v2 07/44] cpuidle,psci: " Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19 14:11   ` Frederic Weisbecker
2022-09-19 14:11     ` Frederic Weisbecker
2022-09-19 14:11     ` Frederic Weisbecker
2022-09-19 14:11     ` Frederic Weisbecker
2022-09-19 14:11     ` Frederic Weisbecker
2022-09-19 14:11     ` Frederic Weisbecker
2022-09-21 21:51   ` Kajetan Puchalski
2022-09-21 21:51     ` Kajetan Puchalski
2022-09-21 21:51     ` Kajetan Puchalski
2022-09-21 21:51     ` Kajetan Puchalski
2022-09-21 21:51     ` Kajetan Puchalski
2022-09-21 21:51     ` Kajetan Puchalski
2022-09-21 21:51     ` Kajetan Puchalski
2022-09-22  0:45   ` Guo Ren
2022-09-22  0:45     ` Guo Ren
2022-09-22  0:45     ` Guo Ren
2022-09-22  0:45     ` Guo Ren
2022-09-22  0:45     ` Guo Ren
2022-09-22  0:45     ` Guo Ren
2022-09-22  0:45     ` Guo Ren
2022-09-19  9:59 ` [PATCH v2 08/44] cpuidle,imx6: " Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19 14:21   ` Frederic Weisbecker
2022-09-19 14:21     ` Frederic Weisbecker
2022-09-19 14:21     ` Frederic Weisbecker
2022-09-19 14:21     ` Frederic Weisbecker
2022-09-19 14:21     ` Frederic Weisbecker
2022-09-19 14:21     ` Frederic Weisbecker
2022-09-19 14:56     ` Peter Zijlstra
2022-09-19 15:00       ` Peter Zijlstra
2022-09-19 15:00       ` Peter Zijlstra
2022-09-19 15:00       ` Peter Zijlstra
2022-09-19 15:00       ` Peter Zijlstra
2022-09-19 15:00       ` Peter Zijlstra
2022-09-19 15:00       ` Peter Zijlstra
2022-09-19 15:00       ` Peter Zijlstra
2022-09-20  8:58     ` Peter Zijlstra
2022-09-20  8:58       ` Peter Zijlstra
2022-09-20  8:58       ` Peter Zijlstra
2022-09-20  8:58       ` Peter Zijlstra
2022-09-20  8:58       ` Peter Zijlstra
2022-09-20  8:58       ` Peter Zijlstra
2022-09-20  8:58       ` Peter Zijlstra
2022-09-20  8:58       ` Peter Zijlstra
2022-09-20  8:56       ` Frederic Weisbecker
2022-09-20  9:01         ` Frederic Weisbecker
2022-09-20  9:01         ` Frederic Weisbecker
2022-09-20  9:01         ` Frederic Weisbecker
2022-09-20  9:01         ` Frederic Weisbecker
2022-09-20  9:01         ` Frederic Weisbecker
2022-09-20  9:01         ` Frederic Weisbecker
2022-09-19 14:49   ` Frederic Weisbecker
2022-09-19 14:49     ` Frederic Weisbecker
2022-09-19 14:49     ` Frederic Weisbecker
2022-09-19 14:49     ` Frederic Weisbecker
2022-09-19 14:49     ` Frederic Weisbecker
2022-09-19 14:49     ` Frederic Weisbecker
2022-09-19 14:49     ` Frederic Weisbecker
2022-09-19 14:56     ` Peter Zijlstra
2022-09-19 15:01       ` Peter Zijlstra
2022-09-19 15:01       ` Peter Zijlstra
2022-09-19 15:01       ` Peter Zijlstra
2022-09-19 15:01       ` Peter Zijlstra
2022-09-19 15:01       ` Peter Zijlstra
2022-09-19 15:01       ` Peter Zijlstra
2022-09-19 15:01       ` Peter Zijlstra
2022-09-19 14:59     ` Peter Zijlstra
2022-09-19 15:03       ` Peter Zijlstra
2022-09-19 15:03       ` Peter Zijlstra
2022-09-19 15:03       ` Peter Zijlstra
2022-09-19 15:03       ` Peter Zijlstra
2022-09-19 15:03       ` Peter Zijlstra
2022-09-19 15:03       ` Peter Zijlstra
2022-09-19 15:03       ` Peter Zijlstra
2022-09-19 15:17       ` Frederic Weisbecker
2022-09-19 15:17         ` Frederic Weisbecker
2022-09-19 15:17         ` Frederic Weisbecker
2022-09-19 15:17         ` Frederic Weisbecker
2022-09-19 15:17         ` Frederic Weisbecker
2022-09-19 15:17         ` Frederic Weisbecker
2022-09-19 15:17         ` Frederic Weisbecker
2022-09-19  9:59 ` [PATCH v2 09/44] cpuidle,omap3: " Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19 14:31   ` Frederic Weisbecker
2022-09-19 14:31     ` Frederic Weisbecker
2022-09-19 14:31     ` Frederic Weisbecker
2022-09-19 14:31     ` Frederic Weisbecker
2022-09-19 14:31     ` Frederic Weisbecker
2022-09-19 14:31     ` Frederic Weisbecker
2022-09-19 14:31     ` Frederic Weisbecker
2022-09-19 15:19     ` Peter Zijlstra
2022-09-19 15:19       ` Peter Zijlstra
2022-09-19 15:19       ` Peter Zijlstra
2022-09-19 15:19       ` Peter Zijlstra
2022-09-19 15:19       ` Peter Zijlstra
2022-09-19 15:19       ` Peter Zijlstra
2022-09-19 15:19       ` Peter Zijlstra
2022-09-19 15:19       ` Peter Zijlstra
2022-09-20  8:39       ` Frederic Weisbecker
2022-09-20  8:39         ` Frederic Weisbecker
2022-09-20  8:39         ` Frederic Weisbecker
2022-09-20  8:39         ` Frederic Weisbecker
2022-09-20  8:39         ` Frederic Weisbecker
2022-09-20  8:39         ` Frederic Weisbecker
2022-09-20  8:39         ` Frederic Weisbecker
2022-09-19 14:43   ` Frederic Weisbecker
2022-09-19 14:43     ` Frederic Weisbecker
2022-09-19 14:43     ` Frederic Weisbecker
2022-09-19 14:43     ` Frederic Weisbecker
2022-09-19 14:43     ` Frederic Weisbecker
2022-09-19 14:43     ` Frederic Weisbecker
2022-09-19 14:43     ` Frederic Weisbecker
2022-09-19  9:59 ` [PATCH v2 10/44] cpuidle,armada: " Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19 14:39   ` Frederic Weisbecker
2022-09-19 14:39     ` Frederic Weisbecker
2022-09-19 14:39     ` Frederic Weisbecker
2022-09-19 14:39     ` Frederic Weisbecker
2022-09-19 14:39     ` Frederic Weisbecker
2022-09-19 14:39     ` Frederic Weisbecker
2022-09-19 14:39     ` Frederic Weisbecker
2022-09-19  9:59 ` [PATCH v2 11/44] cpuidle,omap4: " Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-20 10:53   ` Frederic Weisbecker
2022-09-20 10:53     ` Frederic Weisbecker
2022-09-20 10:53     ` Frederic Weisbecker
2022-09-20 10:53     ` Frederic Weisbecker
2022-09-20 10:53     ` Frederic Weisbecker
2022-09-20 10:53     ` Frederic Weisbecker
2022-09-20 10:53     ` Frederic Weisbecker
2022-09-19  9:59 ` [PATCH v2 12/44] cpuidle,dt: " Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-10-04 10:59   ` Ulf Hansson
2022-10-04 11:03     ` Ulf Hansson
2022-10-04 11:03     ` Ulf Hansson
2022-10-04 11:03     ` Ulf Hansson
2022-10-04 11:03     ` Ulf Hansson
2022-10-04 11:03     ` Ulf Hansson
2022-10-04 11:03     ` Ulf Hansson
2022-10-04 11:03     ` Ulf Hansson
2022-10-04 11:43     ` Ulf Hansson [this message]
2022-10-04 11:43       ` Ulf Hansson
2022-10-04 11:43       ` Ulf Hansson
2022-10-04 11:43       ` Ulf Hansson
2022-10-04 11:43       ` Ulf Hansson
2022-10-04 11:43       ` Ulf Hansson
2022-10-04 11:43       ` Ulf Hansson
2022-10-04 11:43       ` Ulf Hansson
2022-11-16 15:29     ` Peter Zijlstra
2022-11-16 15:29       ` Peter Zijlstra
2022-11-16 15:29       ` Peter Zijlstra
2022-11-16 15:29       ` Peter Zijlstra
2022-11-16 15:29       ` Peter Zijlstra
2022-11-16 15:29       ` Peter Zijlstra
2022-11-16 15:29       ` Peter Zijlstra
2022-11-16 15:29       ` Peter Zijlstra
2022-11-16 15:29       ` Peter Zijlstra
2022-11-22 15:58       ` Ulf Hansson
2022-11-22 16:04         ` Ulf Hansson
2022-11-22 16:04         ` Ulf Hansson
2022-11-22 16:04         ` Ulf Hansson
2022-11-22 16:04         ` Ulf Hansson
2022-11-22 16:04         ` Ulf Hansson
2022-11-22 16:04         ` Ulf Hansson
2022-11-22 16:04         ` Ulf Hansson
2022-11-22 16:04         ` Ulf Hansson
2022-09-19  9:59 ` [PATCH v2 13/44] cpuidle: Fix ct_idle_*() usage Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 14/44] cpuidle,cpu_pm: Remove RCU fiddling from cpu_pm_{enter,exit}() Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` [PATCH v2 14/44] cpuidle, cpu_pm: Remove RCU fiddling from cpu_pm_{enter, exit}() Peter Zijlstra
2022-09-19  9:59   ` [PATCH v2 14/44] cpuidle,cpu_pm: Remove RCU fiddling from cpu_pm_{enter,exit}() Peter Zijlstra
2022-09-19  9:59   ` [PATCH v2 14/44] cpuidle, cpu_pm: Remove RCU fiddling from cpu_pm_{enter, exit}() Peter Zijlstra
2022-10-04 11:04   ` [PATCH v2 14/44] cpuidle,cpu_pm: Remove RCU fiddling from cpu_pm_{enter,exit}() Ulf Hansson
2022-10-04 11:04     ` [PATCH v2 14/44] cpuidle, cpu_pm: Remove RCU fiddling from cpu_pm_{enter, exit}() Ulf Hansson
2022-10-04 11:04     ` [PATCH v2 14/44] cpuidle,cpu_pm: Remove RCU fiddling from cpu_pm_{enter,exit}() Ulf Hansson
2022-10-04 11:04     ` [PATCH v2 14/44] cpuidle, cpu_pm: Remove RCU fiddling from cpu_pm_{enter, exit}() Ulf Hansson
2022-10-04 11:04     ` [PATCH v2 14/44] cpuidle,cpu_pm: Remove RCU fiddling from cpu_pm_{enter,exit}() Ulf Hansson
2022-10-04 11:04     ` Ulf Hansson
2022-10-04 11:04     ` Ulf Hansson
2022-10-04 11:04     ` [PATCH v2 14/44] cpuidle, cpu_pm: Remove RCU fiddling from cpu_pm_{enter, exit}() Ulf Hansson
2022-09-19  9:59 ` [PATCH v2 15/44] acpi_idle: Remove tracing Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 16/44] cpuidle: Annotate poll_idle() Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 17/44] objtool/idle: Validate __cpuidle code as noinstr Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 18/44] cpuidle, intel_idle: Fix CPUIDLE_FLAG_IRQ_ENABLE *again* Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` [PATCH v2 18/44] cpuidle,intel_idle: " Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` [PATCH v2 18/44] cpuidle, intel_idle: " Peter Zijlstra
2022-09-19  9:59   ` [PATCH v2 18/44] cpuidle,intel_idle: " Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 19/44] cpuidle,intel_idle: Fix CPUIDLE_FLAG_INIT_XSTATE Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59 ` [PATCH v2 20/44] cpuidle,intel_idle: Fix CPUIDLE_FLAG_IBRS Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19  9:59   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 21/44] arch/idle: Change arch_cpu_idle() IRQ behaviour Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-20  5:08   ` Guo Ren
2022-09-20  5:08     ` Guo Ren
2022-09-20  5:08     ` Guo Ren
2022-09-20  5:08     ` Guo Ren
2022-09-20  5:08     ` Guo Ren
2022-09-20  5:08     ` Guo Ren
2022-09-20  5:08     ` Guo Ren
2022-09-19 10:00 ` [PATCH v2 22/44] x86/tdx: Remove TDX_HCALL_ISSUE_STI Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 23/44] arm,smp: Remove trace_.*_rcuidle() usage Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-10-04 11:08   ` Ulf Hansson
2022-10-04 11:08     ` Ulf Hansson
2022-10-04 11:08     ` Ulf Hansson
2022-10-04 11:08     ` Ulf Hansson
2022-10-04 11:08     ` Ulf Hansson
2022-10-04 11:08     ` Ulf Hansson
2022-10-04 11:08     ` Ulf Hansson
2022-10-04 11:08     ` Ulf Hansson
2022-09-19 10:00 ` [PATCH v2 24/44] arm64,smp: " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 25/44] printk: " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-20  2:49   ` Sergey Senozhatsky
2022-09-20  2:49     ` Sergey Senozhatsky
2022-09-20  2:49     ` Sergey Senozhatsky
2022-09-20  2:49     ` Sergey Senozhatsky
2022-09-20  2:49     ` Sergey Senozhatsky
2022-09-20  2:49     ` Sergey Senozhatsky
2022-09-20  2:49     ` Sergey Senozhatsky
2022-09-19 10:00 ` [PATCH v2 26/44] time/tick-broadcast: Remove RCU_NONIDLE usage Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 27/44] cpuidle,sched: Remove annotations from TIF_{POLLING_NRFLAG,NEED_RESCHED} Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 27/44] cpuidle, sched: Remove annotations from TIF_{POLLING_NRFLAG, NEED_RESCHED} Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 27/44] cpuidle,sched: Remove annotations from TIF_{POLLING_NRFLAG,NEED_RESCHED} Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 27/44] cpuidle, sched: Remove annotations from TIF_{POLLING_NRFLAG, NEED_RESCHED} Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 27/44] cpuidle,sched: Remove annotations from TIF_{POLLING_NRFLAG,NEED_RESCHED} Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 27/44] cpuidle, sched: Remove annotations from TIF_{POLLING_NRFLAG, NEED_RESCHED} Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 28/44] cpuidle,mwait: Make noinstr clean Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 29/44] cpuidle,tdx: Make tdx " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 30/44] cpuidle,xenpv: Make more PARAVIRT_XXL " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:45   ` Juergen Gross via Virtualization
2022-09-19 10:45     ` Juergen Gross via Virtualization
2022-09-19 10:45     ` Juergen Gross
2022-09-19 10:45     ` Juergen Gross
2022-09-19 10:45     ` Juergen Gross
2022-09-19 10:45     ` Juergen Gross
2022-09-19 10:45     ` Juergen Gross
2022-09-19 10:00 ` [PATCH v2 31/44] cpuidle,nospec: Make " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 32/44] cpuidle,acpi: " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 33/44] ftrace: WARN on rcuidle Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-26 18:41   ` Steven Rostedt
2022-09-26 18:41     ` Steven Rostedt
2022-09-26 18:41     ` Steven Rostedt
2022-09-26 18:41     ` Steven Rostedt
2022-09-26 18:41     ` Steven Rostedt
2022-09-26 18:41     ` Steven Rostedt
2022-09-26 18:41     ` Steven Rostedt
2022-09-26 18:41     ` Steven Rostedt
2022-10-04 17:19   ` Mark Rutland
2022-10-04 17:19     ` Mark Rutland
2022-10-04 17:19     ` Mark Rutland
2022-10-04 17:19     ` Mark Rutland
2022-10-04 17:19     ` Mark Rutland
2022-10-04 17:19     ` Mark Rutland
2022-10-04 17:19     ` Mark Rutland
2022-10-04 17:19     ` Mark Rutland
2022-09-19 10:00 ` [PATCH v2 34/44] cpuidle,omap3: Use WFI for omap3_pm_idle() Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 35/44] cpuidle,omap3: Push RCU-idle into omap_sram_idle() Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 36/44] cpuidle, omap4: Push RCU-idle into omap4_enter_lowpower() Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 36/44] cpuidle,omap4: " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 36/44] cpuidle, omap4: " Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 36/44] cpuidle,omap4: " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 37/44] arm,omap2: Use WFI for omap2_pm_idle() Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-27  6:21   ` Tony Lindgren
2022-09-27  6:21     ` Tony Lindgren
2022-09-27  6:21     ` Tony Lindgren
2022-09-27  6:21     ` Tony Lindgren
2022-09-27  6:21     ` Tony Lindgren
2022-09-27  6:21     ` Tony Lindgren
2022-09-27  6:21     ` Tony Lindgren
2022-09-19 10:00 ` [PATCH v2 38/44] cpuidle,powerdomain: Remove trace_.*_rcuidle() Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-10-04 11:12   ` Ulf Hansson
2022-10-04 11:12     ` Ulf Hansson
2022-10-04 11:12     ` Ulf Hansson
2022-10-04 11:12     ` Ulf Hansson
2022-10-04 11:12     ` Ulf Hansson
2022-10-04 11:12     ` Ulf Hansson
2022-10-04 11:12     ` Ulf Hansson
2022-10-04 11:12     ` Ulf Hansson
2022-09-19 10:00 ` [PATCH v2 39/44] cpuidle,clk: " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-28 18:01   ` Stephen Boyd
2022-09-28 18:01     ` Stephen Boyd
2022-09-28 18:01     ` Stephen Boyd
2022-09-28 18:01     ` Stephen Boyd
2022-09-28 18:01     ` Stephen Boyd
2022-10-04 11:09   ` Ulf Hansson
2022-10-04 11:09     ` Ulf Hansson
2022-10-04 11:09     ` Ulf Hansson
2022-10-04 11:09     ` Ulf Hansson
2022-10-04 11:09     ` Ulf Hansson
2022-10-04 11:09     ` Ulf Hansson
2022-10-04 11:09     ` Ulf Hansson
2022-10-04 11:09     ` Ulf Hansson
2022-09-19 10:00 ` [PATCH v2 40/44] ubsan: Fix objtool UACCESS warns Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 41/44] intel_idle: Add force_irq_on module param Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 42/44] entry, kasan, x86: Disallow overriding mem*() functions Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 42/44] entry,kasan,x86: " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 42/44] entry, kasan, x86: " Peter Zijlstra
2022-09-19 10:00   ` [PATCH v2 42/44] entry,kasan,x86: " Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 43/44] sched: Always inline __this_cpu_preempt_check() Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00 ` [PATCH v2 44/44] arm64,riscv,perf: Remove RCU_NONIDLE() usage Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 10:00   ` Peter Zijlstra
2022-09-19 15:21 ` [PATCH v2 00/44] cpuidle,rcu: Clean up the mess Rafael J. Wysocki
2022-09-19 15:21   ` Rafael J. Wysocki
2022-09-19 15:21   ` Rafael J. Wysocki
2022-09-19 15:21   ` Rafael J. Wysocki
2022-09-19 15:21   ` Rafael J. Wysocki
2022-09-19 15:21   ` Rafael J. Wysocki
2022-09-19 15:21   ` Rafael J. Wysocki
2022-09-19 15:21   ` Rafael J. Wysocki
2022-09-20 12:31 ` Frederic Weisbecker
2022-09-20 12:31   ` Frederic Weisbecker
2022-09-20 12:31   ` Frederic Weisbecker
2022-09-20 12:31   ` Frederic Weisbecker
2022-09-20 12:31   ` Frederic Weisbecker
2022-09-20 12:31   ` Frederic Weisbecker
2022-09-20 12:31   ` Frederic Weisbecker
2022-09-20 14:04 ` Peter Zijlstra
2022-09-20 14:04   ` Peter Zijlstra
2022-09-20 14:04   ` Peter Zijlstra
2022-09-20 14:04   ` Peter Zijlstra
2022-09-20 14:04   ` Peter Zijlstra
2022-09-20 14:04 ` Peter Zijlstra
2022-09-20 14:04 ` Peter Zijlstra
2022-09-27  6:31 ` Tony Lindgren
2022-09-27  6:31   ` Tony Lindgren
2022-09-27  6:31   ` Tony Lindgren
2022-09-27  6:31   ` Tony Lindgren
2022-09-27  6:31   ` Tony Lindgren
2022-09-27  6:31   ` Tony Lindgren
2022-09-27  6:31   ` Tony Lindgren
2022-10-04 15:15 ` Ulf Hansson
2022-10-04 15:15   ` Ulf Hansson
2022-10-04 15:15   ` Ulf Hansson
2022-10-04 15:15   ` Ulf Hansson
2022-10-04 15:15   ` Ulf Hansson
2022-10-04 15:15   ` Ulf Hansson
2022-10-04 15:15   ` Ulf Hansson
2022-10-04 15:15   ` Ulf Hansson

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='CAPDyKFqGSt2NFe8aY=6rkp4P-WH7DCO1fmWrcXk4_5XNEvv25w@mail.gmail.com' \
    --to=ulf.hansson@linaro.org \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=acme@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=agross@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=amakhalov@vmware.com \
    --cc=andreyknvl@gmail.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=anton.ivanov@cambridgegreys.com \
    --cc=anup@brainfault.org \
    --cc=aou@eecs.berkeley.edu \
    --cc=arnd@arndb.de \
    --cc=atishp@atishpatra.org \
    --cc=bcain@quicinc.com \
    --cc=bjorn.andersson@linaro.org \
    --cc=boris.ostrovsky@oracle.com \
    --cc=bp@alien8.de \
    --cc=bristot@redhat.com \
    --cc=bsegall@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=chenhuacai@kernel.org \
    --cc=chris@zankel.net \
    --cc=christophe.leroy@csgroup.eu \
    --cc=cl@linux.com \
    --cc=dalias@libc.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=dave.hansen@linux.intel.com \
    --cc=davem@davemloft.net \
    --cc=deller@gmx.de \
    --cc=dennis@kernel.org \
    --cc=dietmar.eggemann@arm.com \
    --cc=dinguyen@kernel.org \
    --cc=dvyukov@google.com \
    --cc=festevam@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=geert@linux-m68k.org \
    --cc=glider@google.com \
    --cc=gor@linux.ibm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=guoren@kernel.org \
    --cc=hca@linux.ibm.com \
    --cc=hpa@zytor.com \
    --cc=ink@jurassic.park.msu.ru \
    --cc=jacob.jun.pan@linux.intel.com \
    --cc=jcmvbkbc@gmail.com \
    --cc=jgross@suse.com \
    --cc=johannes@sipsolutions.net \
    --cc=john.ogness@linutronix.de \
    --cc=jolsa@kernel.org \
    --cc=jonas@southpole.se \
    --cc=jonathanh@nvidia.com \
    --cc=jpoimboe@kernel.org \
    --cc=juri.lelli@redhat.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=kernel@pengutronix.de \
    --cc=kernel@xen0n.name \
    --cc=khilman@kernel.org \
    --cc=konrad.dybcio@somainline.org \
    --cc=lenb@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-alpha@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-csky@vger.kernel.org \
    --cc=linux-hexagon@vger.kernel.org \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=linux-snps-arc@lists.infradead.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=linux-um@lists.infradead.org \
    --cc=linux-xtensa@linux-xtensa.org \
    --cc=linux@armlinux.org.uk \
    --cc=linux@rasmusvillemoes.dk \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=loongarch@lists.linux.dev \
    --cc=lpieralisi@kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mattst88@gmail.com \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=monstr@monstr.eu \
    --cc=mpe@ellerman.id.au \
    --cc=mturquette@baylibre.com \
    --cc=namhyung@kernel.org \
    --cc=npiggin@gmail.com \
    --cc=openrisc@lists.librecores.org \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=pavel@ucw.cz \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=pv-drivers@vmware.com \
    --cc=rafael@kernel.org \
    --cc=richard.henderson@linaro.org \
    --cc=richard@nod.at \
    --cc=rostedt@goodmis.org \
    --cc=ryabinin.a.a@gmail.com \
    --cc=s.hauer@pengutronix.de \
    --cc=sammy@sammy.net \
    --cc=sboyd@kernel.org \
    --cc=senozhatsky@chromium.org \
    --cc=shawnguo@kernel.org \
    --cc=shorne@gmail.com \
    --cc=sparclinux@vger.kernel.org \
    --cc=stefan.kristiansson@saunalahti.fi \
    --cc=sudeep.holla@arm.com \
    --cc=svens@linux.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=thierry.reding@gmail.com \
    --cc=tj@kernel.org \
    --cc=tony@atomide.com \
    --cc=tsbogend@alpha.franken.de \
    --cc=ulli.kroll@googlemail.com \
    --cc=vgupta@kernel.org \
    --cc=vincent.guittot@linaro.org \
    --cc=vincenzo.frascino@arm.com \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=vschneid@redhat.com \
    --cc=will@kernel.org \
    --cc=x86@kernel.org \
    --cc=ysato@users.sourceforge.jp \
    --cc=yury.norov@gmail.com \
    /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.