MLX(4)

πŸ’– MLX(4) πŸ’–

okay so bestie, gather round, we're doing the mlx(4) page today and honestly? it's a whole vibe. it's a kernel interfaces manual page, it lives in section 4, and it's all about the Mylex DAC-family RAID driver. grab a snack πŸ“, this one has a lot of diagnostics and we're going through every single one of them, no skips, no cap.


🌸 NAME 🌸

mlx β€” the Mylex DAC-family RAID driver. that's it. short, sweet, main character energy πŸ‘‘


✨ SYNOPSIS ✨

so like, if you want this driver compiled into your kernel, you gotta drop these lines into your kernel configuration file:

device pci
device mlx

and if you'd rather load it as a module at boot time instead (lowkey the easier path ngl), you put this one line in loader.conf(5):

mlx_load="YES"

periodt. that's the whole synopsis. πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

the mlx driver provides support for Mylex DAC-family PCI to SCSI RAID controllers, and that includes the versions that got relabeled by Digital/Compaq. relabeled!! like when your fave does a collab and puts their name on it ✨. same energy.


🌈 HARDWARE 🌈

here's the full roster of controllers the mlx driver supports, and bestie it is a list:

  • Mylex DAC960P
  • Mylex DAC960PD / DEC KZPSC (Fast Wide)
  • Mylex DAC960PDU
  • Mylex DAC960PL
  • Mylex DAC960PJ
  • Mylex DAC960PG
  • Mylex DAC960PU / DEC PZPAC (Ultra Wide)
  • Mylex AcceleRAID 150 (DAC960PRL)
  • Mylex AcceleRAID 250 (DAC960PTL1)
  • Mylex eXtremeRAID 1100 (DAC1164P)
  • RAIDarray 230 controllers, aka the Ultra-SCSI DEC KZPAC-AA (1-ch, 4MB cache), KZPAC-CA (3-ch, 4MB), KZPAC-CB (3-ch, 8MB cache)

all the major firmware revisions are supported β€” 2.x, 3.x, 4.x and 5.x β€” but ngl it is always advisable to upgrade to the most recent firmware available for the controller. like, always always. glow up your firmware fr fr πŸ”₯.

and if you've got a compatible Mylex controller that's not on this list? it should work, but it has not been verified. so like, it's giving "trust me bro" but we're not gonna promise anything πŸ™ˆ.


πŸ’€ DIAGNOSTICS πŸ’€

this is the big one. buckle up bestie, we're reading the group chat that is the kernel log.

🧚 Controller initialisation phase

mlx%d: controller initialisation in progress...
mlx%d: initialisation complete

the controller firmware is performing/has completed initialisation. it's doing its little warm-up stretch, let it cook 🫢

mlx%d: physical drive %d:%d not responding

the drive at channel:target is not responding. it may have failed or been removed. ghosted you, basically 😭

mlx%d: spinning up drives...

drive startup is in progress; this may take several minutes. it's spinning, it's spinning, give it a sec ⏳

mlx%d: configuration checksum error

the array configuration has become corrupted. not the vibe. not the vibe at all πŸ’€

mlx%d: mirror race recovery in progress
mlx%d: mirror race on a critical system drive
mlx%d: mirror race recovery failed

these error codes are undocumented. yeah. we don't know either. mysterious ✨

mlx%d: physical drive %d:%d COD mismatch

configuration data on the drive at channel:target does not match the rest of the array. it's wearing the wrong outfit to the function πŸŽ€

mlx%d: system drive installation aborted

errors occurred preventing one or more system drives from being configured. aborted. we're not doing this today 🚫

mlx%d: new controller configuration found

the controller has detected a configuration on disk which supersedes the configuration in its nonvolatile memory. it will reset and come up with the new configuration. out with the old, in with the new πŸ’…

mlx%d: FATAL MEMORY PARITY ERROR

firmware detected a fatal memory error; the driver will not attempt to attach to this controller. > this one is capital-L Loud for a reason, bestie. fatal means fatal. 😭

mlx%d: unknown firmware initialisation error %x:%x:%x

an unknown error occurred during initialisation; it will be ignored. we're moving on, we're ignoring it, we're thriving 🌸

🌟 Driver initialisation/shutdown phase

mlx%d: can't allocate scatter/gather DMA tag
mlx%d: can't allocate buffer DMA tag
mlx%d: can't allocate s/g table
mlx%d: can't make initial s/g list mapping
mlx%d: can't make permanent s/g list mapping
mlx%d: can't allocate interrupt
mlx%d: can't set up interrupt

a resource allocation error occurred while initialising the driver; initialisation has failed and the driver will not attach to this controller. the whole group project fell apart 😭

mlx%d: error fetching drive status

the current status of all system drives could not be fetched; attachment of system drives will be aborted. couldn't get the status, so we're not attaching, periodt.

mlx%d: device_add_child failed
mlx%d: bus_generic_attach returned %d

creation of the system drive instances failed; attachment of one or more system drives may have been aborted. it's giving "we tried" πŸ₯²

mlxd%d: detaching...

the indicated system drive is being detached. bye bestie πŸ‘‹

mlxd%d: still open, can't detach

the indicated system drive is still open or mounted; the controller cannot be detached. it's still busy!! leave it alone!! πŸ™ˆ

mlx%d: flushing cache...

the controller cache is being flushed prior to detach or shutdown. flush it, flush it πŸ’¦

πŸ”₯ Operational diagnostics

mlx%d: ENQUIRY failed - %s
mlx%d: ENQUIRY2 failed
mlx%d: ENQUIRY_OLD failed
mlx%d: FLUSH failed - %s
mlx%d: CHECK ASYNC failed - %s
mlx%d: REBUILD ASYNC failed - %s
mlx%d: command failed - %s

the controller rejected a command for the reason given. it said no. respect the no 🫢

mlx%d: I/O beyond end of unit (%u,%d > %u)
mlx%d: I/O error - %s

an I/O error was reported by the controller. rough.

mlx%d: periodic enquiry failed - %s

an attempt to poll the controller for status failed for the reason given. the check-in text didn't send, iykyk 😭

mlx%d: mlx_periodic_enquiry: unknown command %x

the periodic status poll has issued a command which has become corrupted. the message got scrambled in the group chat πŸ’€

mlxd%d: drive offline
mlxd%d: drive online
mlxd%d: drive critical

the system disk indicated has changed state. it's going through something. we're supporting it 🌈

mlx%d: physical drive %d:%d reset
mlx%d: physical drive %d:%d killed %s
mlx%d: physical drive %d:%d error log: sense = %d asc = %x asq = %x
mlx%d:   info %4D csi %4D

the drive at channel:target has been reset, killed for the given reason, or experienced a SCSI error. (killed!! dramatic!! πŸ’€)

mlx%d: unknown log message type %x
mlx%d: error reading message log - %s

an error occurred while trying to read the controller's message log. the receipts are unreadable 😭

mlxd%d: consistency check started
mlx%d: consistency check completed

a user-initiated consistency check has started/completed. you did that! proud of you πŸ‘‘

mlx%d: drive rebuild started for %d:%d
mlx%d: drive rebuild completed

a user-initiated physical drive rebuild has started/completed. again β€” you did that! slay ✨

mlx%d: background check/rebuild operation started
mlx%d: background check/rebuild operation completed

an automatic system drive consistency check or physical drive rebuild has started/completed. this one does it all by itself, no prompting needed, main character energy πŸ’…

mlx%d: channel %d pausing for %d seconds
mlx%d: channel %d resuming
mlx%d: pause command failed - %s
mlx%d: pause failed for channel %d
mlx%d: resume command failed - %s
mlx%d: resume failed for channel %d

controller/channel pause operation notification. heads up though: > (channel pause is not currently supported on any controller.) so like, cute messages, no actual feature. it's giving fake ✨

mlx%d: controller wedged (not taking commands)

the controller is not responding to attempts to submit new commands. it's not ignoring you on purpose, it's just wedged. stuck. immovable. iconic in the worst way πŸ’€

mlx%d: duplicate done event for slot %d
mlx%d: done event for nonbusy slot %d

corruption has occurred in either the controller's onboard list of commands or in the driver. something is Wrong and we're logging it loudly 😭


🌈 SEE ALSO 🌈

that's your one (1) friend in this whole page. go say hi 🫢


πŸ‘‘ AUTHORS πŸ‘‘

the mlx driver was written by Michael Smith <msmith@FreeBSD.org>.

this manual page was written by Jeroen Ruigrok van der Werven <asmodai@FreeBSD.org> and Michael Smith <msmith@FreeBSD.org>.

absolute legends, both of them πŸ’–


πŸ’€ BUGS πŸ’€

okay so, the not-so-great news:

  • the DEC KZPSC has insufficient flash ROM to hold any reasonably recent firmware. this has caused problems for this driver. not enough room, bestie, it's a whole storage situation 😭
  • the driver does not yet support the version 6.x firmware as found in the AcceleRAID 352 and eXtremeRAID 2000 and 3000 products. not yet!! future update pending, we wait πŸ™ˆ

and that's the whole page, bestie πŸŽ€ this was the Debian version of the page, dated February 15, 2017 β€” yeah it's a lil vintage, it's giving retro, we love her anyway. mwah πŸ’‹

πŸ“¦ where this page comes from