> Date: Mon, 14 Oct 2019 18:44:08 +1000
> From: Jonathan Matthew <[email protected]>
> 
> Recently I discovered that (some?) mpii(4) controllers fill in link->port_wwn
> with a fake wwn (4433221102000000) for sata devices.  When you're trying to
> boot a sparc64 box off a sata device attached to such a controller, this means
> the bootpath matching in device_register() doesn't work, so you have to enter
> the root device manually, which is unfun.
> 
> By the time the device is being registered, scsi_probedev has filled in the
> devid, so we can use that to match against the boot path if link->port_wwn
> doesn't work.
> 
> This makes life a lot easier on this controller in my S7-2:
> mpii0 at pci19 dev 0 function 0 "Symbios Logic SAS3008" rev 0x02a
> mpii0: ORCL-INT-SAS3, firmware 9.0.0.0, MPI 2.5
> scsibus2 at mpii0: 1024 targets
> 
> ok?
> 
> 
> Index: autoconf.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/sparc64/sparc64/autoconf.c,v
> retrieving revision 1.132
> diff -u -p -r1.132 autoconf.c
> --- autoconf.c        25 Jul 2019 22:45:53 -0000      1.132
> +++ autoconf.c        14 Oct 2019 03:34:08 -0000
> @@ -1459,6 +1459,16 @@ device_register(struct device *dev, void
>                       if (bp->val[0] == sl->port_wwn && lun == sl->lun) {
>                               nail_bootdev(dev, bp);
>                       }
> +
> +                     /*
> +                      * sata devices on some controllers don't get
> +                      * port_wwn filled in, so look at devid too.
> +                      */
> +                     if (sl->id && sl->id->d_len == 8 &&
> +                         sl->id->d_type == DEVID_NAA) {
> +                             if (memcmp(sl->id + 1, &bp->val[0], 8) == 0)
> +                                     nail_bootdev(dev, bp);

The nested if statements look a bit weird.  ANy reason why you're not
using a single if-statement here?

Otherwise this looks good to me.

Reply via email to