ACPI slowdown...

From: Tony Hoyle (tmh@magenta-netlogic.com)
Date: Wed Feb 07 2001 - 12:54:12 EST


I've been trying to track down what makes ACPI kill the system in 2.4.1.

In the acpi_idle function (drivers/acpi/cpu.c), it seems to spend most
of its time with interrupts disabled, only enabling them to check
need_resched occasionally.

In the 'sleep1' state the following code is executed:

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

                 __cli();
                 if (current->need_resched)
                         goto out;
                 time = acpi_read_pm_timer();
                 safe_halt();
                 diff = acpi_compare_pm_timers(time, acpi_read_pm_timer());
                 if (diff > acpi_c2_enter_latency
                     && acpi_max_c_state >= 2)
                         goto sleep2;
         }

This looks wrong to me. It's basically looping with interrupts
disabled. I can't see how current->need_resched could be updated at
all, so the loop will only terminate when the PM timer tells it to.

Isn't disabling interrupts a bad thing anyway? Wouldn't it be better to
leave them enabled (this is uniprocessor only so there shouldn't be
concurrency issues).

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.

tmh@magenta-netlogic.com

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



This archive was generated by hypermail 2b29 : Wed Feb 07 2001 - 21:00:27 EST