1 // SPDX-License-Identifier: GPL-2.0 << 2 /* 1 /* 3 * The idle loop for all SuperH platforms. !! 2 * Idle daemon for PowerPC. Idle daemon will handle any action >> 3 * that needs to be taken when the system becomes idle. 4 * 4 * 5 * Copyright (C) 2002 - 2009 Paul Mundt !! 5 * Written by Cort Dougan (cort@cs.nmt.edu). Subsequently hacked >> 6 * on by Tom Rini, Armin Kuster, Paul Mackerras and others. >> 7 * >> 8 * This program is free software; you can redistribute it and/or >> 9 * modify it under the terms of the GNU General Public License >> 10 * as published by the Free Software Foundation; either version >> 11 * 2 of the License, or (at your option) any later version. 6 */ 12 */ 7 #include <linux/cpu.h> !! 13 #include <linux/config.h> 8 #include <linux/module.h> !! 14 #include <linux/errno.h> 9 #include <linux/init.h> !! 15 #include <linux/sched.h> >> 16 #include <linux/kernel.h> 10 #include <linux/mm.h> 17 #include <linux/mm.h> 11 #include <linux/pm.h> << 12 #include <linux/tick.h> << 13 #include <linux/preempt.h> << 14 #include <linux/thread_info.h> << 15 #include <linux/irqflags.h> << 16 #include <linux/smp.h> 18 #include <linux/smp.h> 17 #include <linux/atomic.h> !! 19 #include <linux/smp_lock.h> 18 #include <asm/processor.h> !! 20 #include <linux/stddef.h> 19 #include <asm/smp.h> !! 21 #include <linux/unistd.h> 20 #include <asm/bl_bit.h> !! 22 #include <linux/ptrace.h> 21 !! 23 #include <linux/slab.h> 22 static void (*sh_idle)(void); !! 24 >> 25 #include <asm/pgtable.h> >> 26 #include <asm/uaccess.h> >> 27 #include <asm/system.h> >> 28 #include <asm/io.h> >> 29 #include <asm/mmu.h> >> 30 #include <asm/cache.h> >> 31 #include <asm/cputable.h> >> 32 #include <asm/machdep.h> 23 33 24 void default_idle(void) 34 void default_idle(void) 25 { 35 { 26 set_bl_bit(); !! 36 void (*powersave)(void); 27 raw_local_irq_enable(); << 28 /* Isn't this racy ? */ << 29 cpu_sleep(); << 30 raw_local_irq_disable(); << 31 clear_bl_bit(); << 32 } << 33 << 34 void __noreturn arch_cpu_idle_dead(void) << 35 { << 36 play_dead(); << 37 } << 38 37 39 void arch_cpu_idle(void) !! 38 powersave = ppc_md.power_save; 40 { << 41 sh_idle(); << 42 } << 43 39 44 void __init select_idle_routine(void) !! 40 if (!need_resched()) { 45 { !! 41 if (powersave != NULL) 46 /* !! 42 powersave(); 47 * If a platform has set its own idle !! 43 #ifdef CONFIG_SMP 48 */ !! 44 else { 49 if (!sh_idle) !! 45 set_thread_flag(TIF_POLLING_NRFLAG); 50 sh_idle = default_idle; !! 46 while (!need_resched()) >> 47 barrier(); >> 48 clear_thread_flag(TIF_POLLING_NRFLAG); >> 49 } >> 50 #endif >> 51 } >> 52 if (need_resched()) >> 53 schedule(); 51 } 54 } 52 55 53 void stop_this_cpu(void *unused) !! 56 /* >> 57 * The body of the idle task. >> 58 */ >> 59 int cpu_idle(void) 54 { 60 { 55 local_irq_disable(); << 56 set_cpu_online(smp_processor_id(), fal << 57 << 58 for (;;) 61 for (;;) 59 cpu_sleep(); !! 62 if (ppc_md.idle != NULL) >> 63 ppc_md.idle(); >> 64 else >> 65 default_idle(); >> 66 return 0; 60 } 67 } 61 68
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.