mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/boot: Fix edd=off to skip mbr
When the fixes commit re-arranged the code, it made edd=off jump to the
mbr code instead of returning from the function. Previously edd_done
was immediately before ret and skipped the MBR check.
Replace edd_done with .Ledd_mbr_sig for the start of the MBR checking,
and replace .Ledd_mbr_sig_skip with .Ledd_done to exit from the function.
edd=off jumps to .Ledd_done to return from the function, and internal
jumps go to .Ledd_mbr_sig to check edd=skipmbr.
Fixes: 5ec164fd61 ("x86/boot: re-arrange how/when we do disk I/O")
Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Release-Acked-By: Oleksii Kurochko<oleksii.kurochko@gmail.com>
This commit is contained in:
1 parent
c859b7b206
commit
02e656f7c8
1 file changed
+6
-6
@@ -25,7 +25,7 @@
|
||||
|
||||
get_edd:
|
||||
cmpb $2, bootsym(opt_edd) # edd=off ?
|
||||
je edd_done
|
||||
je .Ledd_done
|
||||
|
||||
# Do the BIOS Enhanced Disk Drive calls
|
||||
# This consists of two calls:
|
||||
@@ -48,7 +48,7 @@ edd_check_ext:
|
||||
movb $0x41, %ah # 0x41 Check Extensions Present
|
||||
movw $0x55AA, %bx # magic
|
||||
int $0x13 # make the call
|
||||
jc edd_done # no more BIOS devices
|
||||
jc .Ledd_mbr_sig # no more BIOS devices
|
||||
|
||||
cmpw $0xAA55, %bx # is magic right?
|
||||
jne edd_next # nope, next...
|
||||
@@ -96,13 +96,13 @@ edd_legacy_done:
|
||||
|
||||
edd_next:
|
||||
incb %dl # increment to next device
|
||||
jz edd_done
|
||||
jz .Ledd_mbr_sig
|
||||
cmpb $EDD_INFO_MAX,bootsym(boot_edd_info_nr)
|
||||
jb edd_check_ext
|
||||
|
||||
edd_done:
|
||||
.Ledd_mbr_sig:
|
||||
cmpb $1, bootsym(opt_edd) # edd=skipmbr ?
|
||||
je .Ledd_mbr_sig_skip
|
||||
je .Ledd_done
|
||||
|
||||
# Read the first sector of each BIOS disk device and store the 4-byte signature
|
||||
.Ledd_mbr_sig_start:
|
||||
@@ -160,7 +160,7 @@ edd_done:
|
||||
jb .Ledd_mbr_sig_read
|
||||
.Ledd_mbr_sig_done:
|
||||
popw %es
|
||||
.Ledd_mbr_sig_skip:
|
||||
.Ledd_done:
|
||||
ret
|
||||
|
||||
GLOBAL(boot_edd_info_nr)
|
||||
|
||||