Download raw body.
mfii(4) testing request
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);
> }
>
mfii(4) testing request