Re: mfii(4) testing request

K R <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <CAMmyGZLTK3FwPytyuOL-_iGUePxt2AkFi_hHo4HZj3X3Rsp98g@mail.gmail.com>
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 <[email protected]> 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);
>  }
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.