Browse Source

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>
William Morrrow 19 năm trước cách đây
mục cha
commit
4e6e6504a4
1 tập tin đã thay đổi với 4 bổ sung1 xóa
  1. 4 1
      arch/i386/kernel/acpi/wakeup.S

+ 4 - 1
arch/i386/kernel/acpi/wakeup.S

@@ -292,7 +292,10 @@ ENTRY(do_suspend_lowlevel)
 	pushl	$3
 	pushl	$3
 	call	acpi_enter_sleep_state
 	call	acpi_enter_sleep_state
 	addl	$4, %esp
 	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
 	.p2align 4,,7
 ret_point:
 ret_point:
 	call	restore_registers
 	call	restore_registers