|
@@ -881,6 +881,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
|
|
|
return(acpi_idle_enter_c1(dev, state));
|
|
|
|
|
|
local_irq_disable();
|
|
|
+
|
|
|
if (cx->entry_method != ACPI_CSTATE_FFH) {
|
|
|
current_thread_info()->status &= ~TS_POLLING;
|
|
|
/*
|
|
@@ -888,12 +889,12 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
|
|
|
* NEED_RESCHED:
|
|
|
*/
|
|
|
smp_mb();
|
|
|
- }
|
|
|
|
|
|
- if (unlikely(need_resched())) {
|
|
|
- current_thread_info()->status |= TS_POLLING;
|
|
|
- local_irq_enable();
|
|
|
- return 0;
|
|
|
+ if (unlikely(need_resched())) {
|
|
|
+ current_thread_info()->status |= TS_POLLING;
|
|
|
+ local_irq_enable();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -918,7 +919,8 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
|
|
|
sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS);
|
|
|
|
|
|
local_irq_enable();
|
|
|
- current_thread_info()->status |= TS_POLLING;
|
|
|
+ if (cx->entry_method != ACPI_CSTATE_FFH)
|
|
|
+ current_thread_info()->status |= TS_POLLING;
|
|
|
|
|
|
cx->usage++;
|
|
|
|
|
@@ -968,6 +970,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
|
|
|
}
|
|
|
|
|
|
local_irq_disable();
|
|
|
+
|
|
|
if (cx->entry_method != ACPI_CSTATE_FFH) {
|
|
|
current_thread_info()->status &= ~TS_POLLING;
|
|
|
/*
|
|
@@ -975,12 +978,12 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
|
|
|
* NEED_RESCHED:
|
|
|
*/
|
|
|
smp_mb();
|
|
|
- }
|
|
|
|
|
|
- if (unlikely(need_resched())) {
|
|
|
- current_thread_info()->status |= TS_POLLING;
|
|
|
- local_irq_enable();
|
|
|
- return 0;
|
|
|
+ if (unlikely(need_resched())) {
|
|
|
+ current_thread_info()->status |= TS_POLLING;
|
|
|
+ local_irq_enable();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
acpi_unlazy_tlb(smp_processor_id());
|
|
@@ -1032,7 +1035,8 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
|
|
|
sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS);
|
|
|
|
|
|
local_irq_enable();
|
|
|
- current_thread_info()->status |= TS_POLLING;
|
|
|
+ if (cx->entry_method != ACPI_CSTATE_FFH)
|
|
|
+ current_thread_info()->status |= TS_POLLING;
|
|
|
|
|
|
cx->usage++;
|
|
|
|