On Wed, 13 Dec 2017 13:31:31 +1100 Alexey Kardashevskiy <aik@xxxxxxxxx> wrote: > By default VFIO disables mapping of MSIX BAR to the userspace as > the userspace may program it in a way allowing spurious interrupts; > instead the userspace uses the VFIO_DEVICE_SET_IRQS ioctl. > In order to eliminate guessing from the userspace about what is > mmapable, VFIO also advertises a sparse list of regions allowed to mmap. > > This works fine as long as the system page size equals to the MSIX > alignment requirement which is 4KB. However with a bigger page size > the existing code prohibits mapping non-MSIX parts of a page with MSIX > structures so these parts have to be emulated via slow reads/writes on > a VFIO device fd. If these emulated bits are accessed often, this has > serious impact on performance. > > This allows mmap of the entire BAR containing MSIX vector table. > > This removes the sparse capability for PCI devices as it becomes useless. > > As the userspace needs to know for sure whether mmapping of the MSIX > vector containing data can succeed, this adds a new capability - > VFIO_REGION_INFO_CAP_MSIX_MAPPABLE - which explicitly tells the userspace > that the entire BAR can be mmapped. > > This does not touch the MSIX mangling in the BAR read/write handlers as > we are doing this just to enable direct access to non MSIX registers. > > Signed-off-by: Alexey Kardashevskiy <aik@xxxxxxxxx> > --- > Changes: > v3: > * rebased on top of "vfio: Simplify capability helper" > > v2: > * rewritten vfio_info_add_capability() to provide same interface for > VFIO_REGION_INFO_CAP_MSIX_MAPPABLE as for other caps. > --- > include/uapi/linux/vfio.h | 10 +++++++ > drivers/vfio/pci/vfio_pci.c | 65 +++++++-------------------------------------- > 2 files changed, 19 insertions(+), 56 deletions(-) Applied to v4.16/vfio. Thanks, Alex