Re: [PATCH v2 07/31] arm64: Process management
From: Tobias Klauser <tklauser@distanz.ch>
Date: 2012-08-16 15:17:41
Also in:
linux-arm-kernel, lkml
From: Tobias Klauser <tklauser@distanz.ch>
Date: 2012-08-16 15:17:41
Also in:
linux-arm-kernel, lkml
On 2012-08-14 at 19:52:08 +0200, Catalin Marinas [off-list ref] wrote:
+void cpu_idle(void)
+{
+ local_fiq_enable();
+
+ /* endless idle loop with no priority at all */
+ while (1) {
+ tick_nohz_idle_enter();
+ rcu_idle_enter();
+ while (!need_resched()) {
+ /*
+ * We need to disable interrupts here to ensure
+ * we don't miss a wakeup call.
+ */
+ local_irq_disable();
+ if (!need_resched()) {
+ stop_critical_timings();
+ pm_idle();
+ start_critical_timings();
+ /*
+ * pm_idle functions should always return
+ * with IRQs enabled.
+ */
+ WARN_ON(irqs_disabled());
+ } else {
+ local_irq_enable();
+ }
+ }
+ rcu_idle_exit();
+ tick_nohz_idle_exit();
+ preempt_enable_no_resched();
+ schedule();
+ preempt_disable();You could use schedule_preempt_disabled() instead of the above 3 calls. See http://lkml.kernel.org/n/tip-24swm5zut3h9c4a6s46x8rws@git.kernel.org Cheers Tobias