WIP: MSI/MSI-X support for nvmed
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)