diff options
author | Peter Zijlstra <peterz@infradead.org> | 2008-04-21 17:22:20 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-23 11:39:25 +0200 |
commit | 0801326f911522ba4140688f0604e76a49cea0c4 (patch) | |
tree | 6c04b8f4b6a16dd4d6620f94cfcef857905e475f /net | |
parent | ae7bdce43fdcf6f517a7fb54a90c16ea43324668 (diff) |
RE: idle (arch,acpi and apm) and lockdep
On Fri, 2008-04-18 at 10:09 -0700, Pallipadi, Venkatesh wrote:
> >@@ -255,7 +254,6 @@ void mwait_idle_with_hints(unsigned long
> >ax, unsigned long cx)
> > /* Default MONITOR/MWAIT with no hints, used for default C1 state */
> > static void mwait_idle(void)
> > {
> >- local_irq_enable();
> > mwait_idle_with_hints(0, 0);
>
> Interrupts are disabled at this point. Correct?
> I don't think this is going to work. mwait_idle with hints 0, 0 needs
> interrupts to be enabled to wake up out of mwait on an interrupt (it can
> wake out of resched due to monitor, but not other interrutps). Only the
> newer chips that support specific ecx flag has "wake up out of interrupt
> even when interrupt is disabled" feature.
>
> We will need something similar to sti_mwait and other code in 64 bit
> mwait_idle() here.
>
> >@@ -244,6 +242,8 @@ void mwait_idle_with_hints(unsigned long
> >ax, unsigned long cx)
> > if (!need_resched())
> > __mwait(ax, cx);
> > }
> >+
> >+ local_irq_enable();
>
> This is problematic. The reason being that we want interrupts to be
> disabled until ACPI code reads timer register to get the accurate idle
> residency. Enabling interrupts here and disabling later in
> acpi_processor_ffh_cstate_enter() above will not help the timing as we
> will have some interrupt handler running in between. We need interrupts
> disabled until ACPI code reads time and enables it.
ok, so we can't merge mwait_idle_with_hints and mwait_idle.
how about this
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'net')
0 files changed, 0 insertions, 0 deletions