summaryrefslogtreecommitdiff
path: root/arch/i386/kernel/acpi/wakeup.S
diff options
context:
space:
mode:
authorWilliam Morrrow <william.morrow@amd.com>2006-08-15 05:37:31 (GMT)
committerLen Brown <len.brown@intel.com>2006-08-16 21:59:05 (GMT)
commit4e6e6504a4572dee3afcb0925ce92ad559e1e0db (patch)
tree9c1d2798c5db07c4df7cddc5db8f12c4c8037ca3 /arch/i386/kernel/acpi/wakeup.S
parent9f737633e6ee54fc174282d49b2559bd2208391d (diff)
downloadlinux-fsl-qoriq-4e6e6504a4572dee3afcb0925ce92ad559e1e0db.tar.xz
ACPI: Handle BIOS that resumes from S3 to suspend routine rather than resume vector
A BIOS has been found that resumes from S3 to the routine that invoked suspend, ignoring the resume vector. This appears to the OS as a failed S3 attempt. This same system suspend/resume's properly with Windows. It is possible to invoke the protected mode register restore routine (which would normally restore the sysenter registers) when the BIOS returns from S3. This has no effect on a correctly running system and repairs the damage from the deviant BIOS. Signed-off-by: William Morrow <william.morrow@amd.com> Signed-off-by: Jordan Crouse <jordan.crouse@amd.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'arch/i386/kernel/acpi/wakeup.S')
-rw-r--r--arch/i386/kernel/acpi/wakeup.S5
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/i386/kernel/acpi/wakeup.S b/arch/i386/kernel/acpi/wakeup.S
index 9f408ee..b781b38 100644
--- a/arch/i386/kernel/acpi/wakeup.S
+++ b/arch/i386/kernel/acpi/wakeup.S
@@ -292,7 +292,10 @@ ENTRY(do_suspend_lowlevel)
pushl $3
call acpi_enter_sleep_state
addl $4, %esp
- ret
+
+# In case of S3 failure, we'll emerge here. Jump
+# to ret_point to recover
+ jmp ret_point
.p2align 4,,7
ret_point:
call restore_registers