diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2011-02-18 15:47:42 -0800 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2011-02-18 15:47:42 -0800 |
commit | ee1b06ea6aed979da3b4e6b6ffea98ad55a3c5c1 (patch) | |
tree | 06b0420b33bdba387d89faba3ed1271492fad9f1 /arch/x86/kernel/reboot_32.S | |
parent | 3d35ac346e981162eeba391e496faceed4753e7b (diff) | |
download | linux-ee1b06ea6aed979da3b4e6b6ffea98ad55a3c5c1.tar.bz2 |
x86, reboot: Fix the use of passed arguments in 32-bit BIOS reboot
The initial version of this patch had %eax being a segment and %ecx
being the mode. I had changed the interfaces, but not the actual
implementation!
Reported-by: Brian Gerst <brgerst@gmail.com>
LKML-Reference: <AANLkTikxqk=HEw9R-Du=v-1ti1HDGAY9vaNUep2XARaz@mail.gmail.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Matthieu Castet <castet.matthieu@free.fr>
Diffstat (limited to 'arch/x86/kernel/reboot_32.S')
-rw-r--r-- | arch/x86/kernel/reboot_32.S | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/x86/kernel/reboot_32.S b/arch/x86/kernel/reboot_32.S index f242356a096e..29092b38d816 100644 --- a/arch/x86/kernel/reboot_32.S +++ b/arch/x86/kernel/reboot_32.S @@ -23,10 +23,14 @@ r_base = . 1: popl %ebx subl $1b, %ebx + /* Compute the equivalent real-mode segment */ + movl %ebx, %ecx + shrl $4, %ecx + /* Patch post-real-mode segment jump */ - movw dispatch_table(%ebx,%ecx,2),%cx - movw %cx, 101f(%ebx) - movw %ax, 102f(%ebx) + movw dispatch_table(%ebx,%eax,2),%ax + movw %ax, 101f(%ebx) + movw %cx, 102f(%ebx) /* Set up the IDT for real mode. */ lidtl machine_real_restart_idt(%ebx) |