aboutsummaryrefslogtreecommitdiff
path: root/arch/x86/boot/edd.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/boot/edd.c')
-rw-r--r--arch/x86/boot/edd.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/x86/boot/edd.c b/arch/x86/boot/edd.c
index d93cbc6464d..bf4ae6ff518 100644
--- a/arch/x86/boot/edd.c
+++ b/arch/x86/boot/edd.c
@@ -32,7 +32,9 @@ static int read_mbr(u8 devno, void *buf)
: "+a" (ax), "+c" (cx), "+d" (dx), "+b" (bx)
: : "esi", "edi", "memory");
- return -(u8)ax; /* 0 or -1 */
+ /* Some BIOSes do not set carry flag on error but still return
+ * error in AH. The condition below is expected to catch both */
+ return -!!ax; /* 0 or -1 */
}
static u32 read_mbr_sig(u8 devno, struct edd_info *ei, u32 *mbrsig)