Date: Sat, 04 Aug 2018 07:26:28 -0700 From: Cy Schubert <Cy.Schubert@cschubert.com> To: Warner Losh <imp@bsdimp.com> Cc: Toomas Soome <tsoome@me.com>, 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: <201808041426.w74EQSHd028096@slippy.cwsent.com> In-Reply-To: Message from Warner Losh <imp@bsdimp.com> of "Sat, 04 Aug 2018 12:11:34 %2B0100." <CANCZdfpYbZ2vD-iXpDC3J4fPcz3SZPacr8U8Tr%2B7bYqZj8je9Q@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
In message <CANCZdfpYbZ2vD-iXpDC3J4fPcz3SZPacr8U8Tr+7bYqZj8je9Q@mail.gma il.com> , Warner Losh writes: > --00000000000017c64d05729a1cbf > Content-Type: text/plain; charset="UTF-8" > Content-Transfer-Encoding: quoted-printable > > 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 It looks good. The only case that hasn't been considered so far is if bd_sectors is arbitrarily low but not zero and the calculated value is the correct one. -- Cheers, Cy Schubert <Cy.Schubert@cschubert.com> FreeBSD UNIX: <cy@FreeBSD.org> Web: http://www.FreeBSD.org The need of the many outweighs the greed of the few.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808041426.w74EQSHd028096>