Hi all, - re-add explanatory comment to P_LVLx invocation that had been removed a while ago While trying to look for superfluous I/O accesses that can be optimized away, I stumbled upon this ACPI sleep I/O access and couldn't figure out why the hell this dummy op was necessary. After more than one hour of internet research, I had collected a sufficient number of documents (among those very old kernel versions) that finally told me what this dummy read was about: STPCLK# doesn't get asserted in time on (some) chipsets, which is why we need to have a dummy I/O read to delay further instruction processing until the CPU is fully stopped. Compile-tested on 2.6.17-mm1. Signed-off-by: Andreas Mohr <andi@xxxxxxxx> diff -urN linux-2.6.17-mm2.orig/drivers/acpi/processor_idle.c linux-2.6.17-mm2.my/drivers/acpi/processor_idle.c --- linux-2.6.17-mm2.orig/drivers/acpi/processor_idle.c 2006-06-26 11:18:52.000000000 +0200 +++ linux-2.6.17-mm2.my/drivers/acpi/processor_idle.c 2006-06-26 18:06:18.000000000 +0200 @@ -361,7 +361,9 @@ t1 = inl(acpi_fadt.xpm_tmr_blk.address); /* Invoke C2 */ inb(cx->address); - /* Dummy op - must do something useless after P_LVL2 read */ + /* Dummy wait op - must do something useless after P_LVL2 read + because chipsets cannot guarantee that STPCLK# signal + gets asserted in time to freeze execution properly. */ t2 = inl(acpi_fadt.xpm_tmr_blk.address); /* Get end time (ticks) */ t2 = inl(acpi_fadt.xpm_tmr_blk.address); @@ -399,7 +401,7 @@ t1 = inl(acpi_fadt.xpm_tmr_blk.address); /* Invoke C3 */ inb(cx->address); - /* Dummy op - must do something useless after P_LVL3 read */ + /* Dummy wait op (see above) */ t2 = inl(acpi_fadt.xpm_tmr_blk.address); /* Get end time (ticks) */ t2 = inl(acpi_fadt.xpm_tmr_blk.address); - To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html