gptzfsboot error using HP Smart Array P410i Controller

John Baldwin jhb at
Mon Aug 15 16:12:09 UTC 2011

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

More information about the freebsd-current mailing list