projects/linux·commit fd899c0c

[PATCH] ppc64: Make idle_loop a ppc_md function

fd899c0c · Michael Ellerman <[email protected]> · 2005-07-07 17:56:28 -07:00

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 <[email protected]>
Signed-off-by: Anton Blanchard <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Commit
fd899c0cc725387992ccfc83fb6f70505c36cbeb
Parents
88de0be0

Changes

3 files changed · +13 −6

FileStatusAddDelContent
arch/ppc64/kernel/idle.cmodified+5−3View file
arch/ppc64/kernel/setup.cmodified+3−3View file
include/asm-ppc64/machdep.hmodified+5−0View file

arch/ppc64/kernel/idle.c

View file
diff --git a/arch/ppc64/kernel/idle.c b/arch/ppc64/kernel/idle.c
index 08952c7..e270055 100644
--- a/arch/ppc64/kernel/idle.c
+++ b/arch/ppc64/kernel/idle.c
@@ -33,6 +33,7 @@
#include <asm/iSeries/ItLpQueue.h>
#include <asm/plpar_wrappers.h>
#include <asm/systemcfg.h>
+#include <asm/machdep.h>
extern void power4_idle(void);
@@ -122,7 +123,7 @@ static int iSeries_idle(void)
#else
-static int default_idle(void)
+int default_idle(void)
{
long oldval;
unsigned int cpu = smp_processor_id();
@@ -288,7 +289,7 @@ static int shared_idle(void)
#endif /* CONFIG_PPC_PSERIES */
-static int native_idle(void)
+int native_idle(void)
{
while(1) {
/* check CPU type here */
@@ -308,7 +309,8 @@ static int native_idle(void)
void cpu_idle(void)
{
- idle_loop();
+ BUG_ON(NULL == ppc_md.idle_loop);
+ ppc_md.idle_loop();
}
int powersave_nap;

arch/ppc64/kernel/setup.c

View file
diff --git a/arch/ppc64/kernel/setup.c b/arch/ppc64/kernel/setup.c
index d5e4866..a278998 100644
--- a/arch/ppc64/kernel/setup.c
+++ b/arch/ppc64/kernel/setup.c
@@ -96,7 +96,6 @@ extern void udbg_init_maple_realmode(void);
extern unsigned long klimit;
extern void mm_init_ppc64(void);
-extern int idle_setup(void);
extern void stab_initialize(unsigned long stab);
extern void htab_initialize(void);
extern void early_init_devtree(void *flat_dt);
@@ -1081,8 +1080,9 @@ void __init setup_arch(char **cmdline_p)
ppc_md.setup_arch();
- /* Select the correct idle loop for the platform. */
- idle_setup();
+ /* Use the default idle loop if the platform hasn't provided one. */
+ if (NULL == ppc_md.idle_loop)
+ ppc_md.idle_loop = default_idle;
paging_init();
ppc64_boot_msg(0x15, "Setup Done");

include/asm-ppc64/machdep.h

View file
diff --git a/include/asm-ppc64/machdep.h b/include/asm-ppc64/machdep.h
index 9cdad3e..1e6ad48 100644
--- a/include/asm-ppc64/machdep.h
+++ b/include/asm-ppc64/machdep.h
@@ -140,8 +140,13 @@ struct machdep_calls {
unsigned long size,
pgprot_t vma_prot);
+ /* Idle loop for this platform, leave empty for default idle loop */
+ int (*idle_loop)(void);
};
+extern int default_idle(void);
+extern int native_idle(void);
+
extern struct machdep_calls ppc_md;
extern char cmd_line[COMMAND_LINE_SIZE];