qemu-e2k/hw
Alex Williamson 95239e1625 vfio/pci: Lazy PBA emulation
The PCI spec recommends devices use additional alignment for MSI-X
data structures to allow software to map them to separate processor
pages.  One advantage of doing this is that we can emulate those data
structures without a significant performance impact to the operation
of the device.  Some devices fail to implement that suggestion and
assigned device performance suffers.

One such case of this is a Mellanox MT27500 series, ConnectX-3 VF,
where the MSI-X vector table and PBA are aligned on separate 4K
pages.  If PBA emulation is enabled, performance suffers.  It's not
clear how much value we get from PBA emulation, but the solution here
is to only lazily enable the emulated PBA when a masked MSI-X vector
fires.  We then attempt to more aggresively disable the PBA memory
region any time a vector is unmasked.  The expectation is then that
a typical VM will run entirely with PBA emulation disabled, and only
when used is that emulation re-enabled.

Reported-by: Shyam Kaushik <shyam.kaushik@gmail.com>
Tested-by: Shyam Kaushik <shyam.kaushik@gmail.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
2016-01-19 11:33:42 -07:00
..
9pfs 9pfs: introduce V9fsVirtioState 2016-01-12 11:04:14 +05:30
acpi trivial patches for 2016-01-11 2016-01-11 12:56:58 +00:00
alpha isa: Clean up error handling around isa_bus_new() 2016-01-13 11:58:59 +01:00
arm hw/arm: Clean up includes 2016-01-18 16:33:32 +00:00
audio
block error: Use error_prepend() where it makes obvious sense 2016-01-13 15:16:17 +01:00
bt
char Error reporting patches for 2016-01-13 2016-01-14 13:07:38 +00:00
core qdev: Free QemuOpts when the QOM path goes away 2016-01-18 17:47:58 +01:00
cpu
cris
display ui/curses: Fix color attribute of monitor for curses 2016-01-08 12:20:07 +01:00
dma hw/dma/xilinx_axidma: remove dead code 2016-01-11 15:52:18 +00:00
gpio omap: Don't use hw_error() in device init() methods 2016-01-13 11:58:58 +01:00
i2c omap: Don't use hw_error() in device init() methods 2016-01-13 11:58:58 +01:00
i386 i386: avoid null pointer dereference 2016-01-15 18:58:01 +01:00
ide hw: Inline the qdev_prop_set_drive_nofail() wrapper 2016-01-13 11:58:58 +01:00
input
intc omap: Don't use hw_error() in device init() methods 2016-01-13 11:58:58 +01:00
ipack
ipmi
isa isa: Clean up inappropriate hw_error() 2016-01-13 15:15:57 +01:00
lm32
m68k hw: Don't use hw_error() for machine initialization errors 2016-01-13 11:58:58 +01:00
mem
microblaze petalogix-ml605: Set the MicroBlaze CPU version to 8.10.a 2016-01-07 14:57:26 +01:00
mips isa: Clean up error handling around isa_bus_new() 2016-01-13 11:58:59 +01:00
misc i.MX: move i.MX31 CCM object to register array 2016-01-11 15:52:18 +00:00
moxie
net etraxfs_eth: Don't use hw_error() in init() method 2016-01-13 11:58:58 +01:00
nvram
openrisc
pci
pci-bridge
pci-host isa: Clean up error handling around isa_bus_new() 2016-01-13 11:58:59 +01:00
pcmcia
ppc qom: Change object property iterator API contract 2016-01-18 17:47:58 +01:00
s390x Error reporting patches for 2016-01-13 2016-01-14 13:07:38 +00:00
scsi SCSI device: fix to incomplete QOMify 2016-01-15 18:58:01 +01:00
sd
sh4 SH PCI Host: convert to realize() 2016-01-11 11:39:28 +03:00
smbios Use error_fatal to simplify obvious fatal errors 2016-01-13 11:58:58 +01:00
sparc
sparc64 target-sparc: Convert to VMStateDescription 2016-01-16 12:01:23 +00:00
ssi
timer arm_mptimer: Don't use hw_error() in realize() method 2016-01-13 11:58:58 +01:00
tpm qemu-char: delete send_all/recv_all helper methods 2016-01-15 18:58:01 +01:00
tricore
unicore32 hw: Don't use hw_error() for machine initialization errors 2016-01-13 11:58:58 +01:00
usb error: Use error_prepend() where it makes obvious sense 2016-01-13 15:16:17 +01:00
vfio vfio/pci: Lazy PBA emulation 2016-01-19 11:33:42 -07:00
virtio VirtFS update: 2016-01-12 17:37:22 +00:00
watchdog
xen xen/Makefile.objs: simplify 2016-01-11 11:39:28 +03:00
xenpv
xtensa
Makefile.objs