diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-07-30 13:33:48 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-30 13:33:48 -0400 |
commit | 15dd859cacf312f606f54502d1f66537a1e5c78c (patch) | |
tree | e50e125eaa6da83fa715704e53c1bde013d1ef8e /drivers/acpi/processor_idle.c | |
parent | b2d9d33412b9d13a40cd314d93ab517950fc5950 (diff) | |
parent | 6e86841d05f371b5b9b86ce76c02aaee83352298 (diff) |
Merge commit 'v2.6.27-rc1' into x86/core
Conflicts:
include/asm-x86/dma-mapping.h
include/asm-x86/namei.h
include/asm-x86/uaccess.h
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/acpi/processor_idle.c')
-rw-r--r-- | drivers/acpi/processor_idle.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index d592dbb1d12..283c08f5f4d 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
@@ -272,6 +272,8 @@ static atomic_t c3_cpu_count; | |||
272 | /* Common C-state entry for C2, C3, .. */ | 272 | /* Common C-state entry for C2, C3, .. */ |
273 | static void acpi_cstate_enter(struct acpi_processor_cx *cstate) | 273 | static void acpi_cstate_enter(struct acpi_processor_cx *cstate) |
274 | { | 274 | { |
275 | /* Don't trace irqs off for idle */ | ||
276 | stop_critical_timings(); | ||
275 | if (cstate->entry_method == ACPI_CSTATE_FFH) { | 277 | if (cstate->entry_method == ACPI_CSTATE_FFH) { |
276 | /* Call into architectural FFH based C-state */ | 278 | /* Call into architectural FFH based C-state */ |
277 | acpi_processor_ffh_cstate_enter(cstate); | 279 | acpi_processor_ffh_cstate_enter(cstate); |
@@ -284,6 +286,7 @@ static void acpi_cstate_enter(struct acpi_processor_cx *cstate) | |||
284 | gets asserted in time to freeze execution properly. */ | 286 | gets asserted in time to freeze execution properly. */ |
285 | unused = inl(acpi_gbl_FADT.xpm_timer_block.address); | 287 | unused = inl(acpi_gbl_FADT.xpm_timer_block.address); |
286 | } | 288 | } |
289 | start_critical_timings(); | ||
287 | } | 290 | } |
288 | #endif /* !CONFIG_CPU_IDLE */ | 291 | #endif /* !CONFIG_CPU_IDLE */ |
289 | 292 | ||
@@ -1329,9 +1332,15 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr) | |||
1329 | if (!pr->flags.power_setup_done) | 1332 | if (!pr->flags.power_setup_done) |
1330 | return -ENODEV; | 1333 | return -ENODEV; |
1331 | 1334 | ||
1332 | /* Fall back to the default idle loop */ | 1335 | /* |
1333 | pm_idle = pm_idle_save; | 1336 | * Fall back to the default idle loop, when pm_idle_save had |
1334 | synchronize_sched(); /* Relies on interrupts forcing exit from idle. */ | 1337 | * been initialized. |
1338 | */ | ||
1339 | if (pm_idle_save) { | ||
1340 | pm_idle = pm_idle_save; | ||
1341 | /* Relies on interrupts forcing exit from idle. */ | ||
1342 | synchronize_sched(); | ||
1343 | } | ||
1335 | 1344 | ||
1336 | pr->flags.power = 0; | 1345 | pr->flags.power = 0; |
1337 | result = acpi_processor_get_power_info(pr); | 1346 | result = acpi_processor_get_power_info(pr); |
@@ -1418,6 +1427,8 @@ static inline void acpi_idle_update_bm_rld(struct acpi_processor *pr, | |||
1418 | */ | 1427 | */ |
1419 | static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx) | 1428 | static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx) |
1420 | { | 1429 | { |
1430 | /* Don't trace irqs off for idle */ | ||
1431 | stop_critical_timings(); | ||
1421 | if (cx->entry_method == ACPI_CSTATE_FFH) { | 1432 | if (cx->entry_method == ACPI_CSTATE_FFH) { |
1422 | /* Call into architectural FFH based C-state */ | 1433 | /* Call into architectural FFH based C-state */ |
1423 | acpi_processor_ffh_cstate_enter(cx); | 1434 | acpi_processor_ffh_cstate_enter(cx); |
@@ -1432,6 +1443,7 @@ static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx) | |||
1432 | gets asserted in time to freeze execution properly. */ | 1443 | gets asserted in time to freeze execution properly. */ |
1433 | unused = inl(acpi_gbl_FADT.xpm_timer_block.address); | 1444 | unused = inl(acpi_gbl_FADT.xpm_timer_block.address); |
1434 | } | 1445 | } |
1446 | start_critical_timings(); | ||
1435 | } | 1447 | } |
1436 | 1448 | ||
1437 | /** | 1449 | /** |
@@ -1890,7 +1902,8 @@ int acpi_processor_power_exit(struct acpi_processor *pr, | |||
1890 | 1902 | ||
1891 | /* Unregister the idle handler when processor #0 is removed. */ | 1903 | /* Unregister the idle handler when processor #0 is removed. */ |
1892 | if (pr->id == 0) { | 1904 | if (pr->id == 0) { |
1893 | pm_idle = pm_idle_save; | 1905 | if (pm_idle_save) |
1906 | pm_idle = pm_idle_save; | ||
1894 | 1907 | ||
1895 | /* | 1908 | /* |
1896 | * We are about to unload the current idle thread pm callback | 1909 | * We are about to unload the current idle thread pm callback |