Index: sys/boot/i386/common/drv.c =================================================================== --- sys/boot/i386/common/drv.c (revision 234685) +++ sys/boot/i386/common/drv.c (working copy) @@ -60,9 +60,11 @@ drvread(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk) { static unsigned c = 0x2d5c7c2f; + int retries = 3; if (!OPT_CHECK(RBX_QUIET)) printf("%c\b", c = c << 8 | c >> 24); +retry: #ifndef USE_XREAD packet.len = sizeof(struct edd_packet); packet.count = nblk; @@ -86,6 +88,10 @@ #endif /* USE_XREAD */ v86int(); if (V86_CY(v86.efl)) { + if (v86.eax >> 8 & 0xff == 0x80) { + if (--retries > 0) + goto retry; + } printf("%s: error %u lba %u\n", BOOTPROG, v86.eax >> 8 & 0xff, lba); return (-1);