Skip to main content

SEF Linux™️ Driver

Although an Software-Enabled Flash™️ (SEF) Unit reports as an NVMe 2.0 device, it requires its own sef.ko device driver and a customized nvme.ko driver. With a kernel version of 6.3, the only customization is to recognize an SEF Unit’s non-standard PCI™️ storage class. This requirement is expected to be dropped in future firmware.

The sef.ko driver is stacked on the nvme.ko and nvme-core.ko drivers. It enumerates the NVMe devices /dev/nvme0 through /dev/nvme255. For every /dev/nvmeX that supports the SEF alternate command set, it creates a corresponding /dev/sefX device. A /dev/sefXnY is also created for every /dev/ngXnY as well.

The following functionality is implemented by the SEF Unit driver.

  • Translates NVMe device udev asynchronous-event-notifications (AENs) into namespace-AEN udev events.
  • Keeps paired commands on the same submit queue.
  • Triggers refresh of QoS Domain and Virtual Device information when affected by SEF admin commands.
  • Publishes device and namespace information via sysfs so discovery does not require root privileges.
  • Adds support for metadata-only reads.
  • Flushes delayed writes before the nvme-core driver’s namespace enumeration freezes and flushes a device’s queues.

The SDK always uses the SEF driver but either device driver can be used to communicate with an SEF Unit. Sending admin commands to the NVMe device may cause sef-cli to return out-of-date information. sef.ko is required for its extended functionality, and in specific cases, it is more efficient to use.