Index | Thread | Search

From:
K R <daharmasterkor@gmail.com>
Subject:
Re: mfii(4) testing request
To:
Jonathan Matthew <jonathan@d14n.org>
Cc:
tech@openbsd.org
Date:
Tue, 25 Aug 2026 09:13:23 -0300

Download raw body.

Thread
Hi Jonathan,

I've tested your diff on a Dell PE R660 with this mfii:

mfii0 at pci11 dev 0 function 0 "Symbios Logic MegaRAID SAS39XX" rev 0x00: msi
mfii0: "PERC H755 Front", firmware 52.30.0-6753, 8192MB cache
scsibus3 at mfii0: 240 targets
scsibus4 at mfii0: 256 targets

After the patch, I'm still getting the same results as before:

test# sysctl hw.sensors.mfii0.drive0
sysctl: hw.sensors.mfii0.drive0: No such file or directory

test# bioctl mfii0
bioctl: BIOCINQ: Invalid argument

Is there a new diff I should try?  Please let me know if you need a
dmesg or pcidump output from this machine.

Thanks,
--Kor

On Wed, Aug 19, 2026 at 2:51 AM Jonathan Matthew <jonathan@d14n.org> wrote:
>
> I'm looking into some problems with newer mfii(4) devices, specifically
> SAS39xx (aka Dell PERC H750/755), but I don't have any available to
> test with myself.
>
> Could anyone with one of these report whether drive sensors attach
> (sysctl hw.sensors.mfii0.drive0 and so on) and whether 'bioctl sdX'
> works for logical drives?  This should produce output like this:
>
> Volume      Status               Size Device
>     mfii0 0 Online       299439751168 sd0     RAID1 WB
>           0 Online       300000000000 1:0.0   noencl <SEAGATE ST300MM0006     LS0A>
>           1 Online       300000000000 1:1.0   noencl <SEAGATE ST300MM0006     LS0A>
>
>
> The newer models support up to 240 logical volumes rather than 64,
> which might be confusing the driver a bit.  This diff might help a
> bit:
>
>
> Index: mfii.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/mfii.c,v
> diff -u -p -r1.93 mfii.c
> --- mfii.c      27 Jul 2026 04:12:50 -0000      1.93
> +++ mfii.c      19 Aug 2026 05:32:06 -0000
> @@ -72,6 +72,8 @@
>
>  #define MFII_CHAIN_FRAME_MIN   1024
>
> +#define MFII_MAX_LD            240
> +
>  struct mfii_request_descr {
>         u_int8_t        flags;
>         u_int8_t        msix_index;
> @@ -154,7 +156,7 @@ struct mfii_ld_map {
>         uint32_t                mlm_reserved1[5];
>         uint32_t                mlm_num_lds;
>         uint32_t                mlm_reserved2;
> -       uint8_t                 mlm_tgtid_to_ld[2 * MFI_MAX_LD];
> +       uint8_t                 mlm_tgtid_to_ld[2 * MFII_MAX_LD];
>         uint8_t                 mlm_pd_timeout;
>         uint8_t                 mlm_reserved3[7];
>         struct mfii_array_map   mlm_am[MFII_MAX_ARRAY];
> @@ -307,8 +309,8 @@ struct mfii_softc {
>          */
>         struct {
>                 char            ld_dev[16];     /* device name sd? */
> -       }                       sc_ld[MFI_MAX_LD];
> -       int                     sc_target_lds[MFI_MAX_LD];
> +       }                       sc_ld[MFII_MAX_LD];
> +       int                     sc_target_lds[MFII_MAX_LD];
>
>         /* scsi ioctl from sd device */
>         int                     (*sc_ioctl)(struct device *, u_long, caddr_t);
> @@ -954,7 +956,7 @@ mfii_detach(struct device *self, int fla
>         if (sc->sc_sensors) {
>                 sensordev_deinstall(&sc->sc_sensordev);
>                 free(sc->sc_sensors, M_DEVBUF,
> -                   MFI_MAX_LD * sizeof(struct ksensor));
> +                   MFII_MAX_LD * sizeof(struct ksensor));
>         }
>
>         if (sc->sc_bbu) {
> @@ -1348,7 +1350,7 @@ void
>  mfii_aen_ld_update(struct mfii_softc *sc)
>  {
>         int i, state, target, old, nld;
> -       int newlds[MFI_MAX_LD];
> +       int newlds[MFII_MAX_LD];
>
>         if (mfii_mgmt(sc, MR_DCMD_LD_GET_LIST, NULL, &sc->sc_ld_list,
>             sizeof(sc->sc_ld_list), SCSI_DATA_IN) != 0) {
> @@ -1367,7 +1369,7 @@ mfii_aen_ld_update(struct mfii_softc *sc
>                 newlds[target] = i;
>         }
>
> -       for (i = 0; i < MFI_MAX_LD; i++) {
> +       for (i = 0; i < MFII_MAX_LD; i++) {
>                 old = sc->sc_target_lds[i];
>                 nld = newlds[i];
>
> @@ -3960,7 +3962,7 @@ mfii_create_sensors(struct mfii_softc *s
>                 }
>         }
>
> -       sc->sc_sensors = mallocarray(MFI_MAX_LD, sizeof(struct ksensor),
> +       sc->sc_sensors = mallocarray(MFII_MAX_LD, sizeof(struct ksensor),
>             M_DEVBUF, M_NOWAIT | M_ZERO);
>         if (sc->sc_sensors == NULL)
>                 return (1);
> @@ -3980,7 +3982,7 @@ mfii_create_sensors(struct mfii_softc *s
>
>  bad:
>         free(sc->sc_sensors, M_DEVBUF,
> -           MFI_MAX_LD * sizeof(struct ksensor));
> +           MFII_MAX_LD * sizeof(struct ksensor));
>
>         return (1);
>  }
>