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> master commit:02e656f7c8master date: 2025-10-16 10:25:27 +0200
This commit is contained in:
1 parent
aab88a3ef3
commit
8b29b6a484
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)
|
||||
|
||||