ACPI: preserve the ebx value in acpi_copy_wakeup_routine
[sfrench/cifs-2.6.git] / arch / i386 / kernel / acpi / wakeup.S
index 44d886c745ecc26063d88fed02a6d4929461337f..a2295a34b2c727577c82ed19c8656c06ec63d7c4 100644 (file)
@@ -56,7 +56,7 @@ wakeup_code:
 1:
 
        # set up page table
-       movl    $swapper_pg_dir-__PAGE_OFFSET, %eax
+       movl    $swsusp_pg_dir-__PAGE_OFFSET, %eax
        movl    %eax, %cr3
 
        testl   $1, real_efer_save_restore - wakeup_code
@@ -230,6 +230,7 @@ bogus_magic:
 #
 ENTRY(acpi_copy_wakeup_routine)
 
+       pushl   %ebx
        sgdt    saved_gdt
        sidt    saved_idt
        sldt    saved_ldt
@@ -263,13 +264,9 @@ 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
 
-.data
-ALIGN
-ENTRY(saved_magic)     .long   0
-ENTRY(saved_eip)       .long   0
-
 save_registers:
        leal    4(%esp), %eax
        movl    %eax, saved_context_esp
@@ -297,20 +294,21 @@ 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
        call    restore_processor_state
        ret
 
-ENTRY(do_suspend_lowlevel_s4bios)
-       call save_processor_state
-       call save_registers
-       call acpi_enter_sleep_state_s4bios
-       ret
-
+.data
 ALIGN
+ENTRY(saved_magic)     .long   0
+ENTRY(saved_eip)       .long   0
+
 # saved registers
 saved_gdt:     .long   0,0
 saved_idt:     .long   0,0