--- linux-2.4.20/Documentation/Configure.help~ Fri Mar 14 09:52:58 2003 +++ linux-2.4.20/Documentation/Configure.help Fri Mar 14 09:53:50 2003 @@ -25479,6 +25479,14 @@ Say Y here to enable machine check support for IA-64. If you're unsure, answer Y. +Use PAL_HALT_LIGHT in idle loop +CONFIG_IA64_PAL_IDLE + Say Y here to enable use of PAL_HALT_LIGHT in the cpu_idle loop. + This allows the CPU to enter a low power state when idle. You + can enable CONFIG_IA64_PALINFO and check /proc/pal/cpu0/power_info + to see the power consumption and latency for this state. If you're + unsure your firmware supports it, answer N. + Disable IA-64 Virtual Hash Page Table CONFIG_DISABLE_VHPT The Virtual Hash Page Table (VHPT) enhances virtual address --- linux-2.4.20/arch/ia64/config.in~ Fri Mar 14 09:53:08 2003 +++ linux-2.4.20/arch/ia64/config.in Fri Mar 14 11:00:36 2003 @@ -86,6 +86,7 @@ define_bool CONFIG_KCORE_ELF y # On IA-64, we always want an ELF /proc/kcore. +bool 'Use PAL_HALT_LIGHT in idle loop' CONFIG_IA64_PAL_IDLE bool 'SMP support' CONFIG_SMP tristate 'Support running of Linux/x86 binaries' CONFIG_IA32_SUPPORT bool 'Performance monitor support' CONFIG_PERFMON --- linux-2.4.20/arch/ia64/kernel/process.c~ Fri Mar 14 09:53:16 2003 +++ linux-2.4.20/arch/ia64/kernel/process.c Fri Mar 14 14:49:02 2003 @@ -122,6 +122,15 @@ show_stack(0); } +static void +default_idle(void) +{ +#ifdef CONFIG_IA64_PAL_IDLE + if (!current->need_resched) + safe_halt(); +#endif +} + void __attribute__((noreturn)) cpu_idle (void *unused) { @@ -132,6 +141,10 @@ while (1) { + void (*idle)(void) = pm_idle; + if (!idle) + idle = default_idle; + #ifdef CONFIG_SMP if (!current->need_resched) min_xtp(); @@ -141,7 +154,7 @@ #ifdef CONFIG_IA64_SGI_SN snidle(); #endif - continue; + idle(); } #ifdef CONFIG_IA64_SGI_SN @@ -153,8 +166,6 @@ #endif schedule(); check_pgt_cache(); - if (pm_idle) - (*pm_idle)(); } } --- linux-2.4.20/include/asm-ia64/system.h~ Fri Mar 14 09:55:42 2003 +++ linux-2.4.20/include/asm-ia64/system.h Fri Mar 14 10:11:01 2003 @@ -104,7 +104,7 @@ #define set_mb(var, value) do { (var) = (value); mb(); } while (0) #define set_wmb(var, value) do { (var) = (value); mb(); } while (0) -#define safe_halt() ia64_pal_halt(1) /* PAL_HALT */ +#define safe_halt() ia64_pal_halt_light() /* PAL_HALT_LIGHT */ /* * The group barrier in front of the rsm & ssm are necessary to ensure