diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2005-07-07 20:56:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-07 21:23:40 -0400 |
commit | fd899c0cc725387992ccfc83fb6f70505c36cbeb (patch) | |
tree | 0de5d3960c7e7247638c962d7913acec1ce2e9fe | |
parent | 88de0be0c7335650326a1236bf6ca1ed265c0a1c (diff) |
[PATCH] ppc64: Make idle_loop a ppc_md function
This patch adds an idle member to the ppc_md structure and calls it from
cpu_idle(). If a platform leaves ppc_md.idle as null it will get the default
idle loop default_idle().
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | arch/ppc64/kernel/idle.c | 8 | ||||
-rw-r--r-- | arch/ppc64/kernel/setup.c | 6 | ||||
-rw-r--r-- | include/asm-ppc64/machdep.h | 5 |
3 files changed, 13 insertions, 6 deletions
diff --git a/arch/ppc64/kernel/idle.c b/arch/ppc64/kernel/idle.c index 08952c7e6216..e270055e73e2 100644 --- a/arch/ppc64/kernel/idle.c +++ b/arch/ppc64/kernel/idle.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <asm/iSeries/ItLpQueue.h> | 33 | #include <asm/iSeries/ItLpQueue.h> |
34 | #include <asm/plpar_wrappers.h> | 34 | #include <asm/plpar_wrappers.h> |
35 | #include <asm/systemcfg.h> | 35 | #include <asm/systemcfg.h> |
36 | #include <asm/machdep.h> | ||
36 | 37 | ||
37 | extern void power4_idle(void); | 38 | extern void power4_idle(void); |
38 | 39 | ||
@@ -122,7 +123,7 @@ static int iSeries_idle(void) | |||
122 | 123 | ||
123 | #else | 124 | #else |
124 | 125 | ||
125 | static int default_idle(void) | 126 | int default_idle(void) |
126 | { | 127 | { |
127 | long oldval; | 128 | long oldval; |
128 | unsigned int cpu = smp_processor_id(); | 129 | unsigned int cpu = smp_processor_id(); |
@@ -288,7 +289,7 @@ static int shared_idle(void) | |||
288 | 289 | ||
289 | #endif /* CONFIG_PPC_PSERIES */ | 290 | #endif /* CONFIG_PPC_PSERIES */ |
290 | 291 | ||
291 | static int native_idle(void) | 292 | int native_idle(void) |
292 | { | 293 | { |
293 | while(1) { | 294 | while(1) { |
294 | /* check CPU type here */ | 295 | /* check CPU type here */ |
@@ -308,7 +309,8 @@ static int native_idle(void) | |||
308 | 309 | ||
309 | void cpu_idle(void) | 310 | void cpu_idle(void) |
310 | { | 311 | { |
311 | idle_loop(); | 312 | BUG_ON(NULL == ppc_md.idle_loop); |
313 | ppc_md.idle_loop(); | ||
312 | } | 314 | } |
313 | 315 | ||
314 | int powersave_nap; | 316 | int powersave_nap; |
diff --git a/arch/ppc64/kernel/setup.c b/arch/ppc64/kernel/setup.c index d5e4866e9ac2..a278998ecb44 100644 --- a/arch/ppc64/kernel/setup.c +++ b/arch/ppc64/kernel/setup.c | |||
@@ -96,7 +96,6 @@ extern void udbg_init_maple_realmode(void); | |||
96 | extern unsigned long klimit; | 96 | extern unsigned long klimit; |
97 | 97 | ||
98 | extern void mm_init_ppc64(void); | 98 | extern void mm_init_ppc64(void); |
99 | extern int idle_setup(void); | ||
100 | extern void stab_initialize(unsigned long stab); | 99 | extern void stab_initialize(unsigned long stab); |
101 | extern void htab_initialize(void); | 100 | extern void htab_initialize(void); |
102 | extern void early_init_devtree(void *flat_dt); | 101 | extern void early_init_devtree(void *flat_dt); |
@@ -1081,8 +1080,9 @@ void __init setup_arch(char **cmdline_p) | |||
1081 | 1080 | ||
1082 | ppc_md.setup_arch(); | 1081 | ppc_md.setup_arch(); |
1083 | 1082 | ||
1084 | /* Select the correct idle loop for the platform. */ | 1083 | /* Use the default idle loop if the platform hasn't provided one. */ |
1085 | idle_setup(); | 1084 | if (NULL == ppc_md.idle_loop) |
1085 | ppc_md.idle_loop = default_idle; | ||
1086 | 1086 | ||
1087 | paging_init(); | 1087 | paging_init(); |
1088 | ppc64_boot_msg(0x15, "Setup Done"); | 1088 | ppc64_boot_msg(0x15, "Setup Done"); |
diff --git a/include/asm-ppc64/machdep.h b/include/asm-ppc64/machdep.h index 9cdad3ed1526..1e6ad4824132 100644 --- a/include/asm-ppc64/machdep.h +++ b/include/asm-ppc64/machdep.h | |||
@@ -140,8 +140,13 @@ struct machdep_calls { | |||
140 | unsigned long size, | 140 | unsigned long size, |
141 | pgprot_t vma_prot); | 141 | pgprot_t vma_prot); |
142 | 142 | ||
143 | /* Idle loop for this platform, leave empty for default idle loop */ | ||
144 | int (*idle_loop)(void); | ||
143 | }; | 145 | }; |
144 | 146 | ||
147 | extern int default_idle(void); | ||
148 | extern int native_idle(void); | ||
149 | |||
145 | extern struct machdep_calls ppc_md; | 150 | extern struct machdep_calls ppc_md; |
146 | extern char cmd_line[COMMAND_LINE_SIZE]; | 151 | extern char cmd_line[COMMAND_LINE_SIZE]; |
147 | 152 | ||