Linux ACPI
 help / color / mirror / Atom feed
* [PATCH]: ACPI: preserve the ebx value in acpi_copy_wakeup_routine
@ 2007-06-01 10:09 Zhang Rui
  2007-06-01 10:17 ` Pavel Machek
  0 siblings, 1 reply; 4+ messages in thread
From: Zhang Rui @ 2007-06-01 10:09 UTC (permalink / raw)
  To: linux-acpi; +Cc: lenb, pavel, kevin.tian

From: Tian Kevin <kevin.tian@intel.com>

Register %ebx serves as the "global offset table base register"
for position-independent code. For absolute code, %ebx serves
as a local register and has no specified role in the function
calling sequence. In either case, a function must preserve the
register value for the caller.

acpi_copy_wakeup_routine overrides %ebx without saving it,
this may corrupt the called data.

Kevin found that most time the value of Sx is saved in %esi,
however sometimes compiler also uses %ebx. When this happens,
suspends fails since sleep value in ebx is changed by
acpi_copy_wakeup_routine.

The same funtion in X86_64 doesn't have this problem.

Signed-off-by: Zhang Rui <rui.zhang@intel.com>
---
 arch/i386/kernel/acpi/wakeup.S |    2 ++
 1 files changed, 2 insertions(+)

Index: linux-2.6.22-rc3/arch/i386/kernel/acpi/wakeup.S
===================================================================
--- linux-2.6.22-rc3.orig/arch/i386/kernel/acpi/wakeup.S	2007-05-31 17:23:56.000000000 +0800
+++ linux-2.6.22-rc3/arch/i386/kernel/acpi/wakeup.S	2007-05-31 17:24:08.000000000 +0800
@@ -230,6 +230,7 @@ bogus_magic:
 #
 ENTRY(acpi_copy_wakeup_routine)
 
+	pushl	%ebx
 	sgdt	saved_gdt
 	sidt	saved_idt
 	sldt	saved_ldt
@@ -263,6 +264,7 @@ ENTRY(acpi_copy_wakeup_routine)
 	movl	%edx, video_flags - wakeup_start (%eax)
 	movl	$0x12345678, real_magic - wakeup_start (%eax)
 	movl	$0x12345678, saved_magic
+	popl	%ebx
 	ret
 
 save_registers:

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-06-04 10:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-01 10:09 [PATCH]: ACPI: preserve the ebx value in acpi_copy_wakeup_routine Zhang Rui
2007-06-01 10:17 ` Pavel Machek
2007-06-01 10:27   ` Zhang, Rui
2007-06-04 10:37     ` Pavel Machek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox