[tip:x86/trampoline] x86, reboot: Fix the use of passed arguments in 32-bit BIOS reboot

From: tip-bot for H. Peter Anvin
Date: Fri Feb 18 2011 - 20:26:13 EST


Commit-ID: ee1b06ea6aed979da3b4e6b6ffea98ad55a3c5c1
Gitweb: http://git.kernel.org/tip/ee1b06ea6aed979da3b4e6b6ffea98ad55a3c5c1
Author: H. Peter Anvin <hpa@xxxxxxxxxxxxxxx>
AuthorDate: Fri, 18 Feb 2011 15:47:42 -0800
Committer: H. Peter Anvin <hpa@xxxxxxxxxxxxxxx>
CommitDate: Fri, 18 Feb 2011 15:47:42 -0800

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@xxxxxxxxx>
LKML-Reference: <AANLkTikxqk=HEw9R-Du=v-1ti1HDGAY9vaNUep2XARaz@xxxxxxxxxxxxxx>
Cc: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
Cc: Rafael J. Wysocki <rjw@xxxxxxx>
Cc: Matthieu Castet <castet.matthieu@xxxxxxx>
---
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 f242356..29092b3 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)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/