diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-02-25 22:41:00 -0500 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-02-25 22:41:00 -0500 |
| commit | 874f2f997dbe041a6c6e509dae8656ed9022d65d (patch) | |
| tree | 61898165882041ef7f9beaf2ef6663a1a4d3c29a /drivers/acpi/processor_idle.c | |
| parent | 071c06cb570d38efe23a124e885f2f3e643a9206 (diff) | |
| parent | 6ebdc661b608671e9ca572af8bb42d58108cc008 (diff) | |
Merge commit 'origin/master' into next
Manual merge of:
drivers/char/hvc_console.c
drivers/char/hvc_console.h
Diffstat (limited to 'drivers/acpi/processor_idle.c')
| -rw-r--r-- | drivers/acpi/processor_idle.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 7c0441f63b39..cc978a8c00b7 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
| @@ -110,6 +110,14 @@ static struct dmi_system_id __cpuinitdata processor_power_dmi_table[] = { | |||
| 110 | DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"), | 110 | DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"), |
| 111 | DMI_MATCH(DMI_BIOS_VERSION,"SHE845M0.86C.0013.D.0302131307")}, | 111 | DMI_MATCH(DMI_BIOS_VERSION,"SHE845M0.86C.0013.D.0302131307")}, |
| 112 | (void *)2}, | 112 | (void *)2}, |
| 113 | { set_max_cstate, "Pavilion zv5000", { | ||
| 114 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
| 115 | DMI_MATCH(DMI_PRODUCT_NAME,"Pavilion zv5000 (DS502A#ABA)")}, | ||
| 116 | (void *)1}, | ||
| 117 | { set_max_cstate, "Asus L8400B", { | ||
| 118 | DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), | ||
| 119 | DMI_MATCH(DMI_PRODUCT_NAME,"L8400B series Notebook PC")}, | ||
| 120 | (void *)1}, | ||
| 113 | {}, | 121 | {}, |
| 114 | }; | 122 | }; |
| 115 | 123 | ||
| @@ -872,12 +880,14 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev, | |||
| 872 | return(acpi_idle_enter_c1(dev, state)); | 880 | return(acpi_idle_enter_c1(dev, state)); |
| 873 | 881 | ||
| 874 | local_irq_disable(); | 882 | local_irq_disable(); |
| 875 | current_thread_info()->status &= ~TS_POLLING; | 883 | if (cx->entry_method != ACPI_CSTATE_FFH) { |
| 876 | /* | 884 | current_thread_info()->status &= ~TS_POLLING; |
| 877 | * TS_POLLING-cleared state must be visible before we test | 885 | /* |
| 878 | * NEED_RESCHED: | 886 | * TS_POLLING-cleared state must be visible before we test |
| 879 | */ | 887 | * NEED_RESCHED: |
| 880 | smp_mb(); | 888 | */ |
| 889 | smp_mb(); | ||
| 890 | } | ||
| 881 | 891 | ||
| 882 | if (unlikely(need_resched())) { | 892 | if (unlikely(need_resched())) { |
| 883 | current_thread_info()->status |= TS_POLLING; | 893 | current_thread_info()->status |= TS_POLLING; |
| @@ -957,12 +967,14 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev, | |||
| 957 | } | 967 | } |
| 958 | 968 | ||
| 959 | local_irq_disable(); | 969 | local_irq_disable(); |
| 960 | current_thread_info()->status &= ~TS_POLLING; | 970 | if (cx->entry_method != ACPI_CSTATE_FFH) { |
| 961 | /* | 971 | current_thread_info()->status &= ~TS_POLLING; |
| 962 | * TS_POLLING-cleared state must be visible before we test | 972 | /* |
| 963 | * NEED_RESCHED: | 973 | * TS_POLLING-cleared state must be visible before we test |
| 964 | */ | 974 | * NEED_RESCHED: |
| 965 | smp_mb(); | 975 | */ |
| 976 | smp_mb(); | ||
| 977 | } | ||
| 966 | 978 | ||
| 967 | if (unlikely(need_resched())) { | 979 | if (unlikely(need_resched())) { |
| 968 | current_thread_info()->status |= TS_POLLING; | 980 | current_thread_info()->status |= TS_POLLING; |
