[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