Tony Hoyle wrote:

I'm talking to myself :-)

OK I see that safe_halt() will re-enable interrupts.  However this is only
called in S1.  If your machine gets as far as S3 you have...

         for (;;) {
                 unsigned long time;
                 unsigned long diff;

                 __cli();
                 if (current->need_resched)
                         goto out;
                 if (acpi_bm_activity())
                         goto sleep2;

                 time = acpi_read_pm_timer();
                 inb(acpi_pblk + ACPI_P_LVL3);
                 /* Dummy read, force synchronization with the PMU */
                 acpi_read_pm_timer();
                 diff = acpi_compare_pm_timers(time, acpi_read_pm_timer());

                 __sti();
                 if (diff < acpi_c3_exit_latency)
                         goto sleep2;
         }

There is no halt here... the interrupts are enabled for only a couple of 
instructions (one comparison and a jump) before being disabled again. 
It seems to me if the computer gets into S3 it'll effectively die until 
some kind of busmaster device wakes it up (DMA?).

The simple fix is to delete lines 332-337 of cpu.c, which disables the 
idle process (and explains why I've had no slowdown on my SMP machine). 
  Lots of people (like me) only use ACPI for the power-off/shutdown 
functionality anyway.  Laptop users will probably have to wait for a 
proper fix (unfortunately the ACPI4Linux mailing list looks dead - it's 
just full of people complaining about 2.4.1...)

Tony

-- 

The only secure computer is one that's unplugged, locked in a safe,
and buried 20 feet under the ground in a secret location... and i'm
not even too sure about that one"--Dennis Huges, FBI.

[EMAIL PROTECTED]

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to