Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Aug 2011 12:12:07 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-current@freebsd.org
Cc:        Christoph Hoffmann <christoph_hoffmann@me.com>
Subject:   Re: gptzfsboot error  using HP Smart Array P410i Controller
Message-ID:  <201108151212.07874.jhb@freebsd.org>
In-Reply-To: <3D9B1E72-385F-493A-A6B3-4684A2DB50E4@me.com>
References:  <E040B3A9-9B62-4545-ADC9-5CE3A9217024@me.com> <9B42BCDF-43E3-4517-9972-47A8B539880F@me.com> <3D9B1E72-385F-493A-A6B3-4684A2DB50E4@me.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Friday, August 05, 2011 10:08:27 am Christoph Hoffmann wrote:
> Hello Everyone,
>=20
> Despite the BIOS information about the nonexistent floppy, the zfsboot.c=
=20
code=20
> will prevent to boot from the first HDD if a floppy is given as a first=20
available device.
>=20
> The drive 0x0 (floppy) will be probed before the code below and an error=
=20
occurs:
> [=85]
> gptzfsboot: error 1 lba 32                                               =
      =20
> gptzfsboot: error 1 lba 1                                                =
      =20
> [=85]
>=20
> The continue statement will skip the rest of the iteration because =20
>          if ((i | DRV_HARD) =3D=3D *(uint8_t *)PTOV(ARGS))=20
> is true if the drive equals 0x80. As a result we do not call probe_drive()
> for this drive.

But that shouldn't happen if ARGS has a drive number of 0.  (In that case 0=
x80=20
!=3D 0x0, so it shouldn't match.)

This shows that PTOV(ARGS) actually has a %dl value of 0x80 which is correc=
t. =20
The question is how your initial 'dsk' ended up using 0x0 instead of 0x80.
Note that your 'type' is 0, so that means that it was ok initially (TYPE_AD=
 is=20
0):

    dsk->drive =3D *(uint8_t *)PTOV(ARGS);
    dsk->type =3D dsk->drive & DRV_HARD ? TYPE_AD : TYPE_FD;

Somewhere between where 'dsk' is initalized in main() and before probe_driv=
e()=20
is called in main() for 'dsk', 'dsk->drive' is getting clobbered.  Can you =
add=20
some additional printfs to nail down where that is happening?

=2D-=20
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108151212.07874.jhb>