aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/tboot.c
diff options
context:
space:
mode:
authorTang Liang <liang.tang@oracle.com>2011-12-08 21:05:54 -0500
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-03-13 14:06:33 -0400
commit09f98a825a821f7a3f1b162f9ed023f37213a63b (patch)
tree37d83899ccac13fe6aa6069aecef8dd8e86d5d2a /arch/x86/kernel/tboot.c
parent805a6af8dba5dfdd35ec35dc52ec0122400b2610 (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.c8
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}
300static 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
301static atomic_t ap_wfs_count; 307static 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