Skip to content

WIP: MSI/MSI-X support for nvmed

Jacob Lorentzon requested to merge 4lDO2/drivers:nvme-msi into master

Adds MSI/MSI-X support for nvmed, by letting a dedicated thread (called the CQ reactor) poll completion queues on every IRQ, and notify the futures awaiting it. Just like with xhcid I haven't integrated this with the Redox event system; right now it only calls futures::executor::block_on on Scheme::read and Scheme::write.

Also:

  • adds (redox-log based) logging for pcid
  • uses a smarter interrupt vector allocator (depends on kernel!120 (merged) for per-CPU allocation)
  • this IRQ based completion queue polling might make the driver somewhat slower, because it has to wait for its scheduling opportunity before it can get the IRQ
  • uses interior locking, this way nvmed could work with multiple threads (apart from the reactor thread)

Merge request reports