On Tuesday, March 22, 2016 11:45:57 PM Peter Zijlstra wrote: > On Tue, Mar 22, 2016 at 11:31:11PM +0100, Rafael J. Wysocki wrote: > > > > diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c > > > index cd4510a63375..924554f920fb 100644 > > > --- a/drivers/idle/intel_idle.c > > > +++ b/drivers/idle/intel_idle.c > > > @@ -725,8 +725,8 @@ static struct cpuidle_state avn_cstates[] = { > > > * > > > * Must be called under local_irq_disable(). > > > */ > > > -static int intel_idle(struct cpuidle_device *dev, > > > - struct cpuidle_driver *drv, int index) > > > +static __cpuidle int intel_idle(struct cpuidle_device *dev, > > > + struct cpuidle_driver *drv, int index) > > > { > > > unsigned long ecx = 1; /* break on interrupt flag */ > > > struct cpuidle_state *state = &drv->states[index]; > > > > Well, what about intel_idle_freeze()? Or do we not care? > > I argued against it; when you're suspended the NMI watchdog is stopped > too.
Is it also stopped for suspend-to-idle? I'm not sure about that. Where do I need to look to find out? > Then again, you've more experience debugging that thing, so if > you think its useful its not much effort adding it. > > > And analogous stuff in processor_idle.c for that matter? > > > > acpi_idle_enter()/acpi_idle_enter_freeze() plus stuff called by those? > > Ah, I only tagged acpi_processor_ffh_cstate_enter() because I went from > mwait_idle_with_hints(), I suppose acpi_safe_halt() and > acpi_idle_do_entry() itself for the INB method should cover it? Yes, these two should be sufficient. > (This being one of the reasons I asked Chris to Cc you; you know this > stuff far better than I do) > > --- > drivers/acpi/processor_idle.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c > index 175c86bee3a9..d5b11fff9e88 100644 > --- a/drivers/acpi/processor_idle.c > +++ b/drivers/acpi/processor_idle.c > @@ -111,7 +111,7 @@ static const struct dmi_system_id > processor_power_dmi_table[] = { > * Callers should disable interrupts before the call and enable > * interrupts after return. > */ > -static void acpi_safe_halt(void) > +__cpuidle static void acpi_safe_halt(void) > { > if (!tif_need_resched()) { > safe_halt(); > @@ -680,7 +680,7 @@ static int acpi_idle_bm_check(void) > * > * Caller disables interrupt before call and enables interrupt after return. > */ > -static void acpi_idle_do_entry(struct acpi_processor_cx *cx) > +__cpuidle static void acpi_idle_do_entry(struct acpi_processor_cx *cx) > { > if (cx->entry_method == ACPI_CSTATE_FFH) { > /* Call into architectural FFH based C-state */