Hi!

> 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?).

No.

If interrupts come in cli-ed section, it will be postponed until
sti. It then comes, and sets need_resched and recovers.

                                                                Pavel
-- 
I'm [EMAIL PROTECTED] "In my country we have almost anarchy and I don't care."
Panos Katsaloulis describing me w.r.t. patents at [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