Hello, here follows several patchs extracting the general VFIO code out of the PCI + VFIO code base. Usually, it's just move and rename of functions. The most complicated ones are:
* eal/linux: extract setup logic out of pci_vfio_map_resource - separation of some setup code out of the pci_vfio_map_resource (which is otherwise quite PCI-speicific) - it is required by the following one * eal/linux: move global vfio_cfg to eal_vfio.c - moving the vfio_cfg global variable out of the eal_pci_vfio together with the functions working with this variable Some patchs make just temporary changes to avoid breakages throughout the patch set (dma mapping). I am not sure, how exactly is the mp_sync code intended to work. Should there be just a single socket connection (no matter how many bus-systems we support)? I assume it works this way so I've generalized the eal_pci_vfio_mp_sync. The vfio initialization is moved out of the rte_eal_pci_init into EAL. The code is now prepared for adding of other infrastructures such as the SoC that I've introduced in [1]. I've partially done this in my workspace. The VFIO code is quite complex and written in a spaghetti style so a more maintainance would be helpful. I've did my best to preserve the semantics (I hope) to be 100 % the same as before. Important: I didn't test whether it's working as I have no VFIO-enabled machine at the moment and the SoC infra is not so ready yet. [1] http://comments.gmane.org/gmane.comp.networking.dpdk.devel/30913 Regards Jan --- Jan Viktorin (15): vfio: fix include of eal_private.h to be local vfio: move VFIO-specific stuff to eal_vfio.h vfio: move common vfio constants to eal_vfio.h vfio: move vfio_iommu_type and dma_map functions to eal_vfio vfio: generalize pci_vfio_set_iommu_type vfio: generalize pci_vfio_has_supported_extensions vfio: move vfio-specific SOCKET_* constants vfio: generalize pci_vfio_get_container_fd vfio: generalize pci_vfio_get_group_no vfio: extract setup logic out of pci_vfio_map_resource vfio: move global vfio_cfg to eal_vfio.c vfio: make vfio_*_dma_map and iommu_types private vfio: rename and generalize eal_pci_vfio_mp_sync vfio: initialize vfio out of the PCI subsystem vfio: change VFIO init to be extendable lib/librte_eal/linuxapp/eal/Makefile | 5 +- lib/librte_eal/linuxapp/eal/eal.c | 33 ++ lib/librte_eal/linuxapp/eal/eal_pci.c | 17 +- lib/librte_eal/linuxapp/eal/eal_pci_init.h | 41 -- lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 517 +------------------- lib/librte_eal/linuxapp/eal/eal_vfio.c | 528 +++++++++++++++++++++ lib/librte_eal/linuxapp/eal/eal_vfio.h | 94 ++++ .../{eal_pci_vfio_mp_sync.c => eal_vfio_mp_sync.c} | 12 +- 8 files changed, 672 insertions(+), 575 deletions(-) create mode 100644 lib/librte_eal/linuxapp/eal/eal_vfio.c rename lib/librte_eal/linuxapp/eal/{eal_pci_vfio_mp_sync.c => eal_vfio_mp_sync.c} (97%) -- 2.8.0