vmd(4): Major driver refactoring - Re-implement pcib interface to use standard pci bus driver on top ofvmd(4) instead of custom one. - Re-implement memory/bus resource allocation to properly hand
vmd(4): Major driver refactoring - Re-implement pcib interface to use standard pci bus driver on top ofvmd(4) instead of custom one. - Re-implement memory/bus resource allocation to properly handle evencomplicated configurations. - Re-implement interrupt handling to evenly distribute children's MSI/MSI-X interrupts between available vmd(4) MSI-X vectors and setup themto be handled by standard OS mechanisms with minimal overhead, exceptsharing when unavoidable.Successfully tested on Dell XPS 13 laptop with Core i7-1185G7 CPU (VMDdevice ID 0x9a0b) and single NVMe SSD, dual-booting with Windows 10.Successfully tested on Supermicro X11DPI-NT motherboard with Xeon(R)Gold 6242R CPUs (VMD device ID 0x201d), simultaneously handling NVMeSSD on one PCIe port and PLX bridge with 3 NVMe and 1 AHCI SSDs onanother. Handles SSD hot-plug (except Optane 905p for some reason,which are not detected until manual bus rescan) and enabled IOMMU(directly connected SSDs work, but ones connected to the PLX failwithout errors from IOMMU).MFC after: 2 weeksSponsored by: iXsystems, Inc.Differential revision: https://reviews.freebsd.org/D31762(cherry picked from commit 7af4475a6e31202a865b1dd3727018659b44470f)
show more ...
This driver attaches to the Intel VMD drive and connects a new PCI domainstarting at the max. domain, and then work down. Then existing FreeBSDdrivers will attach. Interrupt routing from the VMD
This driver attaches to the Intel VMD drive and connects a new PCI domainstarting at the max. domain, and then work down. Then existing FreeBSDdrivers will attach. Interrupt routing from the VMD MSI-X to the NVMEdrive is not well known, so any interrupt is sent to all children thatregister.VROC used Intel meta data so graid(8) works with it. However, graid(8)supports RAID 0,1,10 for read and write. I have some early code tosupport writes with RAID 5. Note that RAID 5 can have life issueswith SSDs since it can cause write amplification from updating the paritydata.Hot plug support needs a change to skip the following check to work: if (pcib_request_feature(dev, PCI_FEATURE_HP) != 0) {in sys/dev/pci/pci_pci.c.Looked at by: imp, rpokala, bcrDifferential Revision: https://reviews.freebsd.org/D21383