On Mon, Sep 19, 2022 at 3:47 PM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > Doing RCU-idle outside the driver, only to then temporarily enable it > again, at least twice, before going idle is daft. > > Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> Looks good to me. For RISC-V cpuidle: Reviewed-by: Anup Patel <anup@xxxxxxxxxxxxxx> Regards, Anup > --- > drivers/cpuidle/cpuidle-riscv-sbi.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > --- a/drivers/cpuidle/cpuidle-riscv-sbi.c > +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c > @@ -116,12 +116,12 @@ static int __sbi_enter_domain_idle_state > return -1; > > /* Do runtime PM to manage a hierarchical CPU toplogy. */ > - ct_irq_enter_irqson(); > if (s2idle) > dev_pm_genpd_suspend(pd_dev); > else > pm_runtime_put_sync_suspend(pd_dev); > - ct_irq_exit_irqson(); > + > + ct_idle_enter(); > > if (sbi_is_domain_state_available()) > state = sbi_get_domain_state(); > @@ -130,12 +130,12 @@ static int __sbi_enter_domain_idle_state > > ret = sbi_suspend(state) ? -1 : idx; > > - ct_irq_enter_irqson(); > + ct_idle_exit(); > + > if (s2idle) > dev_pm_genpd_resume(pd_dev); > else > pm_runtime_get_sync(pd_dev); > - ct_irq_exit_irqson(); > > cpu_pm_exit(); > > @@ -246,6 +246,7 @@ static int sbi_dt_cpu_init_topology(stru > * of a shared state for the domain, assumes the domain states are all > * deeper states. > */ > + drv->states[state_count - 1].flags |= CPUIDLE_FLAG_RCU_IDLE; > drv->states[state_count - 1].enter = sbi_enter_domain_idle_state; > drv->states[state_count - 1].enter_s2idle = > sbi_enter_s2idle_domain_idle_state; > >