diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-23 21:15:05 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-23 21:15:05 -0500 |
| commit | be64c970f601d5bb439b6cc88ea2bd208b3422a0 (patch) | |
| tree | 8bf588711019bfef8fe111e2ac6283910ffe725e /drivers/acpi/processor_idle.c | |
| parent | 34e3f91b4e66e52b3e189b2f778bd37d68963ca8 (diff) | |
| parent | b2cb9dcb98cc7a3210e9138a05e0ae1863523a61 (diff) | |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
ACPI: Be in TS_POLLING state during mwait based C-state entry
ACPI: Fix regression where _PPC is not read at boot even when ignore_ppc=0
acer-wmi: Respect current backlight level when loading
Diffstat (limited to 'drivers/acpi/processor_idle.c')
| -rw-r--r-- | drivers/acpi/processor_idle.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index e88e8ae04fdb..cc978a8c00b7 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
| @@ -880,12 +880,14 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev, | |||
| 880 | return(acpi_idle_enter_c1(dev, state)); | 880 | return(acpi_idle_enter_c1(dev, state)); |
| 881 | 881 | ||
| 882 | local_irq_disable(); | 882 | local_irq_disable(); |
| 883 | current_thread_info()->status &= ~TS_POLLING; | 883 | if (cx->entry_method != ACPI_CSTATE_FFH) { |
| 884 | /* | 884 | current_thread_info()->status &= ~TS_POLLING; |
| 885 | * TS_POLLING-cleared state must be visible before we test | 885 | /* |
| 886 | * NEED_RESCHED: | 886 | * TS_POLLING-cleared state must be visible before we test |
| 887 | */ | 887 | * NEED_RESCHED: |
| 888 | smp_mb(); | 888 | */ |
| 889 | smp_mb(); | ||
| 890 | } | ||
| 889 | 891 | ||
| 890 | if (unlikely(need_resched())) { | 892 | if (unlikely(need_resched())) { |
| 891 | current_thread_info()->status |= TS_POLLING; | 893 | current_thread_info()->status |= TS_POLLING; |
| @@ -965,12 +967,14 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev, | |||
| 965 | } | 967 | } |
| 966 | 968 | ||
| 967 | local_irq_disable(); | 969 | local_irq_disable(); |
| 968 | current_thread_info()->status &= ~TS_POLLING; | 970 | if (cx->entry_method != ACPI_CSTATE_FFH) { |
| 969 | /* | 971 | current_thread_info()->status &= ~TS_POLLING; |
| 970 | * TS_POLLING-cleared state must be visible before we test | 972 | /* |
| 971 | * NEED_RESCHED: | 973 | * TS_POLLING-cleared state must be visible before we test |
| 972 | */ | 974 | * NEED_RESCHED: |
| 973 | smp_mb(); | 975 | */ |
| 976 | smp_mb(); | ||
| 977 | } | ||
| 974 | 978 | ||
| 975 | if (unlikely(need_resched())) { | 979 | if (unlikely(need_resched())) { |
| 976 | current_thread_info()->status |= TS_POLLING; | 980 | current_thread_info()->status |= TS_POLLING; |
