Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Aug 2018 12:11:34 +0100
From:      Warner Losh <imp@bsdimp.com>
To:        Toomas Soome <tsoome@me.com>
Cc:        Xin LI <d@delphij.net>, Cy Schubert <cy@freebsd.org>,  src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org,  svn-src-head@freebsd.org, tsoome@freebsd.org
Subject:   Re: svn commit: r337271 - head/stand/i386/libi386
Message-ID:  <CANCZdfpYbZ2vD-iXpDC3J4fPcz3SZPacr8U8Tr%2B7bYqZj8je9Q@mail.gmail.com>
In-Reply-To: <7212F80A-9BA8-4D64-AB66-B8FA9F08409F@me.com>
References:  <201808031911.w73JB0WK025164@repo.freebsd.org> <87cc3ae5-cbef-0d04-071e-cb7f7a410ce8@delphij.net> <7212F80A-9BA8-4D64-AB66-B8FA9F08409F@me.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Aug 4, 2018, 11:58 AM Toomas Soome <tsoome@me.com> wrote:

>
>
> > On 4 Aug 2018, at 11:54, Xin Li <delphij@delphij.net> wrote:
> >
> > Hi, Cy,
> >
> > On 8/3/18 12:11, Cy Schubert wrote:
> >> Author: cy
> >> Date: Fri Aug  3 19:11:00 2018
> >> New Revision: 337271
> >> URL: https://svnweb.freebsd.org/changeset/base/337271
> >>
> >> Log:
> >>  Some drives report a geometry that is inconsisetent with the total
> >>  number of sectors reported through the BIOS. Cylinders * heads *
> >>  sectors may not necessarily be equal to the total number of sectors
> >>  reported through int13h function 48h.
> >>
> >>  An example of this is when a Mediasonic HD3-U2B PATA to USB enclosure
> >>  with a 80 GB disk is attached. Loader hangs at line 506 of
> >>  stand/i386/libi386/biosdisk.c while attempting to read sectors beyond
> >>  the end of the disk, sector 156906855. I discovered that the Mediason=
ic
> >>  enclosure was reporting the disk with 9767 cylinders, 255 heads, 63
> >>  sectors/track. That's 156906855 sectors. However camcontrol and
> >>  Windows 10 both report report the disk having 156301488 sectors, not
> >>  the calculated value. At line 280 biosdisk.c sets the sectors to the
> >>  higher of either bd->bd_sectors or the total calculated at line 276
> >>  (156906855) instead of the lower and correct value of 156301488
> reported
> >>  by int 13h 48h.
> >>
> >>  This was tested on all three of my Mediasonic HD3-U2B PATA to USB
> >>  enclosures.
> >>
> >>  Instead of using the higher of bd_sectors (returned by int13h) or the
> >>  calculated value, this patch uses the lower and safer of the values.
> >>
> >>  Reviewed by:        tsoome@
> >>  Differential Revision:      https://reviews.freebsd.org/D16577
> >>
> >> Modified:
> >>  head/stand/i386/libi386/biosdisk.c
> >>
> >> Modified: head/stand/i386/libi386/biosdisk.c
> >>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> >> --- head/stand/i386/libi386/biosdisk.c       Fri Aug  3 18:52:51 2018
>       (r337270)
> >> +++ head/stand/i386/libi386/biosdisk.c       Fri Aug  3 19:11:00 2018
>       (r337271)
> >> @@ -275,7 +275,7 @@ bd_int13probe(struct bdinfo *bd)
> >>
> >>              total =3D (uint64_t)params.cylinders *
> >>                  params.heads * params.sectors_per_track;
> >> -            if (bd->bd_sectors < total)
> >> +            if (bd->bd_sectors > total)
> >>                      bd->bd_sectors =3D total;
> >>
> >>              ret =3D 1;
> >>
> >
> > This broke loader on my system, but I think your reasoning was valid so
> > I took a deeper look and discovered that on my system, INT 13h, functio=
n
> > 48h would give zeros in EDD parameters' CHS fields.  With that, the
> > calculated CHS based total would be 0, and your change would cause
> > bd_sectors be zeroed.
> >
> > Could you please let me know if https://reviews.freebsd.org/D16588 make=
s
> > sense to you?  (I'm not 100% certain if I have followed the code).  It
> > allowed my Asrock C2750D4I based board to boot from ZFS.
> >
>
> I have in mind something a bit different for some time, but haven=E2=80=
=99t had
> chance to complete it because I have no =E2=80=9Cweird=E2=80=9D systems t=
o validate the
> idea:D I=E2=80=99ll try to get a bit of time and post an phabricator soon=
.
>

I think the phab looks good, but I am only on my phone so can't say so
there...

Warner

>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfpYbZ2vD-iXpDC3J4fPcz3SZPacr8U8Tr%2B7bYqZj8je9Q>