gptzfsboot error using HP Smart Array P410i Controller
christoph_hoffmann at me.com
Tue Aug 16 13:15:04 UTC 2011
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.
In zfsboot.c main(), before the line
bootinfo.bi_version = 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.
dsk = malloc(sizeof(struct dsk));
keeps the dsk->drive value assigned to 0x80 and the box will boot.
Any comments will be appreciated.
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,
>> Despite the BIOS information about the nonexistent floppy, the zfsboot.c
>> will prevent to boot from the first HDD if a floppy is given as a first
> available device.
>> The drive 0x0 (floppy) will be probed before the code below and an error
>> gptzfsboot: error 1 lba 32
>> gptzfsboot: error 1 lba 1
>> The continue statement will skip the rest of the iteration because
>> if ((i | DRV_HARD) == *(uint8_t *)PTOV(ARGS))
>> 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 0x80
> != 0x0, so it shouldn't match.)
> This shows that PTOV(ARGS) actually has a %dl value of 0x80 which is correct.
> 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
> dsk->drive = *(uint8_t *)PTOV(ARGS);
> dsk->type = dsk->drive & DRV_HARD ? TYPE_AD : TYPE_FD;
> Somewhere between where 'dsk' is initalized in main() and before probe_drive()
> is called in main() for 'dsk', 'dsk->drive' is getting clobbered. Can you add
> some additional printfs to nail down where that is happening?
> John Baldwin
> freebsd-current at freebsd.org mailing list
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
More information about the freebsd-current