aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/boot/memory.c
diff options
context:
space:
mode:
authorMichael K. Johnson <johnsonm@rpath.com>2009-03-27 13:14:41 -0400
committerH. Peter Anvin <hpa@zytor.com>2009-03-28 15:45:39 -0400
commit01522df346f846906eaf6ca57148641476209909 (patch)
tree06fa393052f7f0a033dcc95440788b05c4044ea2 /arch/x86/boot/memory.c
parentc8608d6b58981a58ca4aee8308576666c5f7ab0c (diff)
x86, setup: mark %esi as clobbered in E820 BIOS call
Jordan Hargrave diagnosed a BIOS clobbering %esi in the E820 call. That particular BIOS has been fixed, but there is a possibility that this is responsible for other occasional reports of early boot failure, and it does not hurt to add %esi to the clobbers. -stable candidate patch. Cc: Justin Forbes <jmforbes@linuxtx.org> Signed-off-by: Michael K Johnson <johnsonm@rpath.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com> Cc: stable@kernel.org
Diffstat (limited to 'arch/x86/boot/memory.c')
-rw-r--r--arch/x86/boot/memory.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/x86/boot/memory.c b/arch/x86/boot/memory.c
index 8c3c25f35578..a99dbbe77a0c 100644
--- a/arch/x86/boot/memory.c
+++ b/arch/x86/boot/memory.c
@@ -27,13 +27,14 @@ static int detect_memory_e820(void)
27 do { 27 do {
28 size = sizeof(struct e820entry); 28 size = sizeof(struct e820entry);
29 29
30 /* Important: %edx is clobbered by some BIOSes, 30 /* Important: %edx and %esi are clobbered by some BIOSes,
31 so it must be either used for the error output 31 so they must be either used for the error output
32 or explicitly marked clobbered. */ 32 or explicitly marked clobbered. */
33 asm("int $0x15; setc %0" 33 asm("int $0x15; setc %0"
34 : "=d" (err), "+b" (next), "=a" (id), "+c" (size), 34 : "=d" (err), "+b" (next), "=a" (id), "+c" (size),
35 "=m" (*desc) 35 "=m" (*desc)
36 : "D" (desc), "d" (SMAP), "a" (0xe820)); 36 : "D" (desc), "d" (SMAP), "a" (0xe820)
37 : "esi");
37 38
38 /* BIOSes which terminate the chain with CF = 1 as opposed 39 /* BIOSes which terminate the chain with CF = 1 as opposed
39 to %ebx = 0 don't always report the SMAP signature on 40 to %ebx = 0 don't always report the SMAP signature on