On Wed, Jun 8, 2022 at 4:47 PM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > All the idle routines are called with RCU disabled, as such there must > not be any tracing inside. > > Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> This actually does some additional code duplication cleanup which would be good to mention in the changelog. Or even move to a separate patch for that matter. Otherwise LGTM. > --- > drivers/acpi/processor_idle.c | 24 +++++++++++++----------- > 1 file changed, 13 insertions(+), 11 deletions(-) > > --- a/drivers/acpi/processor_idle.c > +++ b/drivers/acpi/processor_idle.c > @@ -108,8 +108,8 @@ static const struct dmi_system_id proces > static void __cpuidle acpi_safe_halt(void) > { > if (!tif_need_resched()) { > - safe_halt(); > - local_irq_disable(); > + raw_safe_halt(); > + raw_local_irq_disable(); > } > } > > @@ -524,16 +524,21 @@ static int acpi_idle_bm_check(void) > return bm_status; > } > > -static void wait_for_freeze(void) > +static __cpuidle void io_idle(unsigned long addr) > { > + /* IO port based C-state */ > + inb(addr); > + > #ifdef CONFIG_X86 > /* No delay is needed if we are in guest */ > if (boot_cpu_has(X86_FEATURE_HYPERVISOR)) > return; > #endif > - /* Dummy wait op - must do something useless after P_LVL2 read > - because chipsets cannot guarantee that STPCLK# signal > - gets asserted in time to freeze execution properly. */ > + /* > + * Dummy wait op - must do something useless after P_LVL2 read > + * because chipsets cannot guarantee that STPCLK# signal > + * gets asserted in time to freeze execution properly. > + */ > inl(acpi_gbl_FADT.xpm_timer_block.address); > } > > @@ -553,9 +558,7 @@ static void __cpuidle acpi_idle_do_entry > } else if (cx->entry_method == ACPI_CSTATE_HALT) { > acpi_safe_halt(); > } else { > - /* IO port based C-state */ > - inb(cx->address); > - wait_for_freeze(); > + io_idle(cx->address); > } > > perf_lopwr_cb(false); > @@ -577,8 +580,7 @@ static int acpi_idle_play_dead(struct cp > if (cx->entry_method == ACPI_CSTATE_HALT) > safe_halt(); > else if (cx->entry_method == ACPI_CSTATE_SYSTEMIO) { > - inb(cx->address); > - wait_for_freeze(); > + io_idle(cx->address); > } else > return -ENODEV; > > >