Re: gptzfsboot error using HP Smart Array P410i Controller
Hello John,
Thank you very much indeed for your reply.
The pmbr.s passes the ARGS set to 0x900 to main() in zfsboot.c and
*(uint8_t *)PTOV(ARGS)) is 0x80.=20
In zfsboot.c main(), before the line
bootinfo.bi_version =3D BOOTINFO_VERSION;
gets executed we still keep the right value of the dsk->drive and just =
after
the execution, the dsk->drive is equal to zero.
Adding
printf("hello\n");
before
dsk =3D malloc(sizeof(struct dsk));
keeps the dsk->drive value assigned to 0x80 and the box will boot.
Any comments will be appreciated.
Best Regards,
Christoph
--
Christoph Hoffmann
On Aug 15, 2011, at 6:12 PM, John Baldwin wrote:
> 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.
>=20
> But that shouldn't happen if ARGS has a drive number of 0. (In that =
case 0x80=20
> !=3D 0x0, so it shouldn't match.)
>=20
> This shows that PTOV(ARGS) actually has a %dl value of 0x80 which is =
correct. =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):
>=20
> dsk->drive =3D *(uint8_t *)PTOV(ARGS);
> dsk->type =3D dsk->drive & DRV_HARD ? TYPE_AD : TYPE_FD;
>=20
> Somewhere between where 'dsk' is initalized in main() and before =
probe_drive()=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?
>=20
> --=20
> John Baldwin
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to =
"freebsd-current-unsubscribe@freebsd.org"
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
討論串 (同標題文章)
完整討論串 (本文為第 8 之 40 篇):