|
@@ -306,11 +306,6 @@ void (*pm_idle)(void);
|
|
|
EXPORT_SYMBOL(pm_idle);
|
|
|
#endif
|
|
|
|
|
|
-static inline int hlt_use_halt(void)
|
|
|
-{
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
#ifndef CONFIG_SMP
|
|
|
static inline void play_dead(void)
|
|
|
{
|
|
@@ -410,28 +405,22 @@ void cpu_idle(void)
|
|
|
*/
|
|
|
void default_idle(void)
|
|
|
{
|
|
|
- if (hlt_use_halt()) {
|
|
|
- trace_power_start_rcuidle(POWER_CSTATE, 1, smp_processor_id());
|
|
|
- trace_cpu_idle_rcuidle(1, smp_processor_id());
|
|
|
- current_thread_info()->status &= ~TS_POLLING;
|
|
|
- /*
|
|
|
- * TS_POLLING-cleared state must be visible before we
|
|
|
- * test NEED_RESCHED:
|
|
|
- */
|
|
|
- smp_mb();
|
|
|
+ trace_power_start_rcuidle(POWER_CSTATE, 1, smp_processor_id());
|
|
|
+ trace_cpu_idle_rcuidle(1, smp_processor_id());
|
|
|
+ current_thread_info()->status &= ~TS_POLLING;
|
|
|
+ /*
|
|
|
+ * TS_POLLING-cleared state must be visible before we
|
|
|
+ * test NEED_RESCHED:
|
|
|
+ */
|
|
|
+ smp_mb();
|
|
|
|
|
|
- if (!need_resched())
|
|
|
- safe_halt(); /* enables interrupts racelessly */
|
|
|
- else
|
|
|
- local_irq_enable();
|
|
|
- current_thread_info()->status |= TS_POLLING;
|
|
|
- trace_power_end_rcuidle(smp_processor_id());
|
|
|
- trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
|
|
|
- } else {
|
|
|
+ if (!need_resched())
|
|
|
+ safe_halt(); /* enables interrupts racelessly */
|
|
|
+ else
|
|
|
local_irq_enable();
|
|
|
- /* loop is done by the caller */
|
|
|
- cpu_relax();
|
|
|
- }
|
|
|
+ current_thread_info()->status |= TS_POLLING;
|
|
|
+ trace_power_end_rcuidle(smp_processor_id());
|
|
|
+ trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
|
|
|
}
|
|
|
#ifdef CONFIG_APM_MODULE
|
|
|
EXPORT_SYMBOL(default_idle);
|