summaryrefslogtreecommitdiffstats
path: root/arch/x86/realmode/rm/wakeup
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2012-05-08 21:22:37 +0300
committerH. Peter Anvin <hpa@linux.intel.com>2012-05-08 11:48:03 -0700
commite5684ec438a094bec0f7d5c52652c0901b48b613 (patch)
tree8cc3cf787a582977ff08ed578907d6df7dbc7e6e /arch/x86/realmode/rm/wakeup
parent968ff9ee56f1e3ed4ff4a6d10185865dc77d8f7e (diff)
downloadtalos-op-linux-e5684ec438a094bec0f7d5c52652c0901b48b613.tar.gz
talos-op-linux-e5684ec438a094bec0f7d5c52652c0901b48b613.zip
x86, realmode: Replace open-coded ljmpw with a macro
We cannot code an ljmpw to the real-mode segment directly, because gas refuses to assemble an ljmp with a symbolic segment. Instead of open-coding it everywhere, define a macro and use it for this case. This is specifically an ljmpw from a 16-bit segment. This is okay, as one should never enter real mode from a 32-bit segment: if one do, the CPU ends up in a bizarre (and useless) mode sometimes called "unreal mode" where segments behave like real mode but the default address and operand sizes is 32 bits. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> Link: http://lkml.kernel.org/r/1336501366-28617-15-git-send-email-jarkko.sakkinen@intel.com
Diffstat (limited to 'arch/x86/realmode/rm/wakeup')
-rw-r--r--arch/x86/realmode/rm/wakeup/wakeup_asm.S9
1 files changed, 3 insertions, 6 deletions
diff --git a/arch/x86/realmode/rm/wakeup/wakeup_asm.S b/arch/x86/realmode/rm/wakeup/wakeup_asm.S
index 4c5c5f2bfbec..8064e1c3591b 100644
--- a/arch/x86/realmode/rm/wakeup/wakeup_asm.S
+++ b/arch/x86/realmode/rm/wakeup/wakeup_asm.S
@@ -6,6 +6,7 @@
#include <asm/page_types.h>
#include <asm/pgtable_types.h>
#include <asm/processor-flags.h>
+#include "../realmode.h"
#include "wakeup.h"
.code16
@@ -36,9 +37,7 @@ wakeup_start:
cli
cld
- .byte 0xea /* ljmpw */
- .word 3f
- .word real_mode_seg
+ LJMPW_RM(3f)
3:
/* Apparently some dimwit BIOS programmers don't know how to
program a PM to RM transition, and we might end up here with
@@ -59,9 +58,7 @@ wakeup_start:
andb $~X86_CR0_PE, %al
movl %eax, %cr0
- .byte 0xea /* ljmpw */
- .word 3f
- .word real_mode_seg
+ LJMPW_RM(3f)
3:
/* Set up segments */
movw %cs, %ax
OpenPOWER on IntegriCloud