[PATCH] [ppc64] Enable POWER5 low power mode in idle loop
Anton Blanchard
anton at samba.org
Fri Sep 10 22:32:09 EST 2004
Now that we understand (and have fixed) the problem with using low power
mode in the idle loop, lets enable it. It should save a fair amount of
power.
(The problem was that our exceptions were inheriting the low power
mode and so were executing at a fraction of the normal cpu issue rate.
We fixed it by always bumping our priority to medium at the start of
every exception).
Signed-off-by: Anton Blanchard <anton at samba.org>
diff -puN arch/ppc64/kernel/idle.c~enable_r31_in_idle arch/ppc64/kernel/idle.c
--- foobar2/arch/ppc64/kernel/idle.c~enable_r31_in_idle 2004-09-10 20:58:19.402799782 +1000
+++ foobar2-anton/arch/ppc64/kernel/idle.c 2004-09-10 20:58:19.423798168 +1000
@@ -142,7 +142,12 @@ int default_idle(void)
while (!need_resched() && !cpu_is_offline(cpu)) {
barrier();
+ /*
+ * Go into low thread priority and possibly
+ * low power mode.
+ */
HMT_low();
+ HMT_very_low();
}
HMT_medium();
@@ -184,18 +189,18 @@ int dedicated_idle(void)
start_snooze = __get_tb() +
*smt_snooze_delay * tb_ticks_per_usec;
while (!need_resched() && !cpu_is_offline(cpu)) {
- /* need_resched could be 1 or 0 at this
- * point. If it is 0, set it to 0, so
- * an IPI/Prod is sent. If it is 1, keep
- * it that way & schedule work.
+ /*
+ * Go into low thread priority and possibly
+ * low power mode.
*/
+ HMT_low();
+ HMT_very_low();
+
if (*smt_snooze_delay == 0 ||
- __get_tb() < start_snooze) {
- HMT_low(); /* Low thread priority */
+ __get_tb() < start_snooze)
continue;
- }
- HMT_very_low(); /* Low power mode */
+ HMT_medium();
if (!(ppaca->lppaca.xIdle)) {
/* Indicate we are no longer polling for
@@ -210,7 +215,6 @@ int dedicated_idle(void)
break;
}
- /* DRENG: Go HMT_medium here ? */
local_irq_disable();
/* SMT dynamic mode. Cede will result
_
More information about the Linuxppc64-dev
mailing list