gptzfsboot error using HP Smart Array P410i Controller
Christoph Hoffmann
christoph_hoffmann at me.com
Tue Aug 16 13:15:04 UTC 2011
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.
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.
Adding
printf("hello\n");
before
dsk = 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,
>>
>> Despite the BIOS information about the nonexistent floppy, the zfsboot.c
> code
>> 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
> occurs:
>> […]
>> 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
> 0):
>
> 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
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
More information about the freebsd-current
mailing list