From: Jonathan Matthew Subject: mfii(4) testing request To: tech@openbsd.org Date: Wed, 19 Aug 2026 15:50:07 +1000 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 1 Online 300000000000 1:1.0 noencl 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); }