/* * the idle loop on a Sparc... ;) */ void cpu_idle(void) { /* endless idle loop with no priority at all */ for (;;) { if (ARCH_SUN4C) { static int count = HZ; static unsigned long last_jiffies; static unsigned long last_faults; static unsigned long fps; unsigned long now; unsigned long faults; extern unsigned long sun4c_kernel_faults; extern void sun4c_grow_kernel_ring(void); local_irq_disable(); now = jiffies; count -= (now - last_jiffies); last_jiffies = now; if (count < 0) { count += HZ; faults = sun4c_kernel_faults; fps = (fps + (faults - last_faults)) >> 1; last_faults = faults; #if 0 printk("kernel faults / second = %ld\n", fps); #endif if (fps >= SUN4C_FAULT_HIGH) { sun4c_grow_kernel_ring(); } } local_irq_enable(); } if (pm_idle) { while (!need_resched()) (*pm_idle)(); } else { while (!need_resched()) cpu_relax(); } preempt_enable_no_resched(); schedule(); preempt_disable(); check_pgt_cache(); }
/* * the idle loop on a Sparc... ;) */ int cpu_idle(void) { int ret = -EPERM; if (current->pid != 0) goto out; /* endless idle loop with no priority at all */ current->nice = 20; current->counter = -100; init_idle(); for (;;) { if (ARCH_SUN4C_SUN4) { static int count = HZ; static unsigned long last_jiffies = 0; static unsigned long last_faults = 0; static unsigned long fps = 0; unsigned long now; unsigned long faults; unsigned long flags; extern unsigned long sun4c_kernel_faults; extern void sun4c_grow_kernel_ring(void); save_and_cli(flags); now = jiffies; count -= (now - last_jiffies); last_jiffies = now; if (count < 0) { count += HZ; faults = sun4c_kernel_faults; fps = (fps + (faults - last_faults)) >> 1; last_faults = faults; #if 0 printk("kernel faults / second = %d\n", fps); #endif if (fps >= SUN4C_FAULT_HIGH) { sun4c_grow_kernel_ring(); } } restore_flags(flags); } check_pgt_cache(); schedule(); }