From: "Vladimir 'φ-coder/phcoder' Serbinenko" <phcoder@gmail.com>
To: The development of GNU GRUB <grub-devel@gnu.org>
Subject: Re: How to debug 'out of disk' error.
Date: Wed, 16 Mar 2011 23:16:05 +0100 [thread overview]
Message-ID: <4D8136A5.10502@gmail.com> (raw)
In-Reply-To: <20110316220021.GI343@caffeine.csclub.uwaterloo.ca>
On 16.03.2011 23:00, Lennart Sorensen wrote:
> On Wed, Mar 16, 2011 at 09:19:12PM +0100, Vladimir 'φ-coder/phcoder' Serbinenko wrote:
>
>> Following may help:
>> === modified file 'grub-core/disk/i386/pc/biosdisk.c'
>> --- grub-core/disk/i386/pc/biosdisk.c 2011-01-04 14:42:47 +0000
>> +++ grub-core/disk/i386/pc/biosdisk.c 2011-03-16 20:17:57 +0000
>> @@ -80,6 +80,9 @@
>> regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
>>
>> grub_bios_interrupt (0x13, ®s);
>> + if (!(regs.flags & GRUB_CPU_INT_FLAGS_CARRY))
>> + return 0;
>> +
>> return (regs.eax >> 8) & 0xff;
>> }
>>
> I now got this:
>
> GRUB loading.
> Welcome to GRUB!
>
> int13_ext fixup due to CARRY flag
> int13_ext fixup due to CARRY flag
> int13_ext fixup due to CARRY flag
> int13_ext fixup due to CARRY flag
> int13_ext fixup due to CARRY flag
> int13_ext fixup due to CARRY flag
> int13_ext fixup due to CARRY flag
> int13_ext fixup due to CARRY flag
> int13_ext fixup due to CARRY flag
>
It's not really a fixup. Correct return on no error is CF=0 AH=0. Some
BIOSes in some other functions returned CF=0, AH!= 0 on no error so it
was a wild guess.
> Failed int13_ext call: ah=42, drive=80, dap= 6fe00 returned eax=8000
>
Error 0x80 according to
http://www.delorie.com/djgpp/doc/rbinter/it/34/2.html means timeout.
Following code would retry on timeout:
=== modified file 'grub-core/disk/i386/pc/biosdisk.c'
--- grub-core/disk/i386/pc/biosdisk.c 2011-01-04 14:42:47 +0000
+++ grub-core/disk/i386/pc/biosdisk.c 2011-03-16 22:13:12 +0000
@@ -72,6 +72,8 @@
grub_biosdisk_rw_int13_extensions (int ah, int drive, void *dap)
{
struct grub_bios_int_registers regs;
+ int tries = 4;
+ retry:
regs.eax = ah << 8;
/* compute the address of disk_address_packet */
regs.ds = (((grub_addr_t) dap) & 0xffff0000) >> 4;
@@ -80,6 +82,16 @@
regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
grub_bios_interrupt (0x13, ®s);
+ if (!(regs.flags & GRUB_CPU_INT_FLAGS_CARRY))
+ return 0;
+
+ if (((regs.eax >> 8) & 0xff) == 0x80 && tries)
+ {
+ grub_millisleep (10);
+ tries--;
+ goto retry;
+ }
+
return (regs.eax >> 8) & 0xff;
}
> error: hd0 out of disk.
> Entering rescue mode...
> grub rescue>
>
> I am now using 1.99-rc1. Here is the biosdisk.c with my changes.
>
>
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
--
Regards
Vladimir 'φ-coder/phcoder' Serbinenko
next prev parent reply other threads:[~2011-03-16 22:16 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-16 15:13 How to debug 'out of disk' error Lennart Sorensen
2011-03-16 15:29 ` Vladimir 'φ-coder/phcoder' Serbinenko
2011-03-16 16:58 ` Lennart Sorensen
2011-03-16 17:21 ` Vladimir 'φ-coder/phcoder' Serbinenko
2011-03-16 17:32 ` Lennart Sorensen
2011-03-16 17:58 ` Vladimir 'φ-coder/phcoder' Serbinenko
2011-03-16 18:14 ` Lennart Sorensen
2011-03-16 19:19 ` Phillip Susi
2011-03-16 19:23 ` Lennart Sorensen
2011-03-16 20:09 ` Lennart Sorensen
2011-03-16 20:19 ` Vladimir 'φ-coder/phcoder' Serbinenko
2011-03-16 22:00 ` Lennart Sorensen
2011-03-16 22:16 ` Vladimir 'φ-coder/phcoder' Serbinenko [this message]
2011-03-17 14:06 ` Lennart Sorensen
2011-03-17 14:18 ` Lennart Sorensen
2011-03-17 16:09 ` Lennart Sorensen
2011-03-17 16:29 ` Vladimir 'φ-coder/phcoder' Serbinenko
2011-03-17 18:40 ` Lennart Sorensen
2011-03-17 19:01 ` Vladimir 'φ-coder/phcoder' Serbinenko
2011-03-17 19:22 ` Lennart Sorensen
2011-03-18 9:04 ` Grégoire Sutre
2011-03-18 14:22 ` Lennart Sorensen
2011-03-18 14:56 ` Grégoire Sutre
2011-03-18 15:26 ` Lennart Sorensen
2011-03-16 19:51 ` Vladimir 'φ-coder/phcoder' Serbinenko
2011-04-06 12:50 ` Vladimir 'φ-coder/phcoder' Serbinenko
2011-04-06 14:38 ` Lennart Sorensen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D8136A5.10502@gmail.com \
--to=phcoder@gmail.com \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.