Re: gptzfsboot error using HP Smart Array P410i Controller

From: Christoph Hoffmann <christoph_hoffmann_at_me.com>
Date: Fri, 05 Aug 2011 16:08:27 +0200
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.

Eliminating
         if ((i | DRV_HARD) == *(uint8_t *)PTOV(ARGS))  
            continue;
would help.

Any comments will be appreciated.

Best Regards,

Christoph

i386/zfsboot/zfsboot.c

int
main(void)
{    
[…]
    /*
     * Probe the rest of the drives that the bios knows about. This
     * will find any other available pools and it may fill in missing
     * vdevs for the boot pool.
     */
    for (i = 0; i < *(unsigned char *)PTOV(BIOS_NUMDRIVES); i++) {
         if ((i | DRV_HARD) == *(uint8_t *)PTOV(ARGS))  
            continue;

        if (!int13probe(i | DRV_HARD))
            break;
[…]
        probe_drive(dsk, NULL);
    }
[…]



On Aug 5, 2011, at 1:47 PM, Christoph Hoffmann wrote:

> Hello John,
> 
> No, I and not using clang.
> 
> My problem persists even I apply the patch. 
> 
> As a workaround I have to put OS on second LUN presented by the 
> P410i Controller.
> 
> Regards,
> 
> Christoph
> 
> --
> Christoph Hoffmann
> 
> 
> On Aug 5, 2011, at 1:37 PM, John Baldwin wrote:
> 
>> On Thursday, August 04, 2011 3:26:49 pm Christoph Hoffmann wrote:
>>> Hello Everyone,
>>> 
>>> The system will successfully boot only if the OS installation is laying on
>>> the second drive or higher (0x81 and more).
>> 
>> Are you using clang?  If so, you should try either using GCC or using this 
>> patch with clang as a workaround from the previous thread on zfsboot issues:
>> 
>> Index: sys/boot/i386/zfsboot/Makefile
>> ===================================================================
>> --- sys/boot/i386/zfsboot/Makefile      (revision 224653)
>> +++ sys/boot/i386/zfsboot/Makefile      (working copy)
>> _at__at_ -20,7 +20,6 _at__at_
>>       -fomit-frame-pointer \
>>       -fno-unit-at-a-time \
>>       -mno-align-long-strings \
>> -       -mrtd \
>>       -DBOOT2 \
>>       -DSIOPRT=${BOOT_COMCONSOLE_PORT} \
>>       -DSIOFMT=${B2SIOFMT} \
>> Index: sys/boot/i386/gptzfsboot/Makefile
>> ===================================================================
>> --- sys/boot/i386/gptzfsboot/Makefile   (revision 224653)
>> +++ sys/boot/i386/gptzfsboot/Makefile   (working copy)
>> _at__at_ -22,7 +22,6 _at__at_
>>       -fomit-frame-pointer \
>>       -fno-unit-at-a-time \
>>       -mno-align-long-strings \
>> -       -mrtd \
>>       -DGPT -DBOOT2 \
>>       -DSIOPRT=${BOOT_COMCONSOLE_PORT} \
>>       -DSIOFMT=${B2SIOFMT} \
>> 
>> -- 
>> 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"
> 
> _______________________________________________
> 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"
Received on Fri Aug 05 2011 - 12:08:44 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:16 UTC