diff options
author | Tang Liang <liang.tang@oracle.com> | 2011-12-08 21:05:54 -0500 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-03-13 14:06:33 -0400 |
commit | 09f98a825a821f7a3f1b162f9ed023f37213a63b (patch) | |
tree | 37d83899ccac13fe6aa6069aecef8dd8e86d5d2a /arch/x86/kernel/tboot.c | |
parent | 805a6af8dba5dfdd35ec35dc52ec0122400b2610 (diff) |
x86, acpi, tboot: Have a ACPI os prepare sleep instead of calling tboot_sleep.
The ACPI suspend path makes a call to tboot_sleep right before
it writes the PM1A, PM1B values. We replace the direct call to
tboot via an registration callback similar to __acpi_register_gsi.
CC: Len Brown <len.brown@intel.com>
Acked-by: Joseph Cihula <joseph.cihula@intel.com>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
[v1: Added __attribute__ ((unused))]
[v2: Introduced a wrapper instead of changing tboot_sleep return values]
[v3: Added return value AE_CTRL_SKIP for acpi_os_sleep_prepare]
Signed-off-by: Tang Liang <liang.tang@oracle.com>
[v1: Fix compile issues on IA64 and PPC64]
[v2: Fix where __acpi_os_prepare_sleep==NULL and did not go in sleep properly]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'arch/x86/kernel/tboot.c')
-rw-r--r-- | arch/x86/kernel/tboot.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/kernel/tboot.c b/arch/x86/kernel/tboot.c index e2410e27f97e..1a4ab7df5b63 100644 --- a/arch/x86/kernel/tboot.c +++ b/arch/x86/kernel/tboot.c | |||
@@ -297,6 +297,12 @@ void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control) | |||
297 | 297 | ||
298 | tboot_shutdown(acpi_shutdown_map[sleep_state]); | 298 | tboot_shutdown(acpi_shutdown_map[sleep_state]); |
299 | } | 299 | } |
300 | static int tboot_sleep_wrapper(u8 sleep_state, u32 pm1a_control, | ||
301 | u32 pm1b_control) | ||
302 | { | ||
303 | tboot_sleep(sleep_state, pm1a_control, pm1b_control); | ||
304 | return 0; | ||
305 | } | ||
300 | 306 | ||
301 | static atomic_t ap_wfs_count; | 307 | static atomic_t ap_wfs_count; |
302 | 308 | ||
@@ -345,6 +351,8 @@ static __init int tboot_late_init(void) | |||
345 | 351 | ||
346 | atomic_set(&ap_wfs_count, 0); | 352 | atomic_set(&ap_wfs_count, 0); |
347 | register_hotcpu_notifier(&tboot_cpu_notifier); | 353 | register_hotcpu_notifier(&tboot_cpu_notifier); |
354 | |||
355 | acpi_os_set_prepare_sleep(&tboot_sleep_wrapper); | ||
348 | return 0; | 356 | return 0; |
349 | } | 357 | } |
350 | 358 | ||