x86, setup: mark %esi as clobbered in E820 BIOS call
authorMichael K. Johnson <johnsonm@rpath.com>
Fri, 27 Mar 2009 17:14:41 +0000 (13:14 -0400)
committerH. Peter Anvin <hpa@zytor.com>
Sat, 28 Mar 2009 19:45:39 +0000 (12:45 -0700)
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
arch/x86/boot/memory.c

index 8c3c25f35578a00c140440131a69ae539038f950..a99dbbe77a0c6a7e92fad1938ba57c51331f150c 100644 (file)
@@ -27,13 +27,14 @@ static int detect_memory_e820(void)
        do {
                size = sizeof(struct e820entry);
 
-               /* Important: %edx is clobbered by some BIOSes,
-                  so it must be either used for the error output
+               /* Important: %edx and %esi are clobbered by some BIOSes,
+                  so they must be either used for the error output
                   or explicitly marked clobbered. */
                asm("int $0x15; setc %0"
                    : "=d" (err), "+b" (next), "=a" (id), "+c" (size),
                      "=m" (*desc)
-                   : "D" (desc), "d" (SMAP), "a" (0xe820));
+                   : "D" (desc), "d" (SMAP), "a" (0xe820)
+                   : "esi");
 
                /* BIOSes which terminate the chain with CF = 1 as opposed
                   to %ebx = 0 don't always report the SMAP signature on