|
@@ -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
|