qemu/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 Remove macros IO_READ_PROTO and IO_WRITE_PROTO 2015-10-19 09:03:53 +02:00
block error: Use error_prepend() where it makes obvious sense 2016-01-13 15:16:17 +01:00
bt bt: avoid unintended sign extension 2015-12-04 09:39:55 +03:00
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 icc_bus: drop the unused files 2015-10-02 16:22:02 -03:00
cris cris: Remove ELF_MACHINE from cpu.h 2015-09-25 12:04:43 +02:00
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 qapi: Change munging of CamelCase enum values 2015-12-17 08:21:28 +01:00
intc omap: Don't use hw_error() in device init() methods 2016-01-13 11:58:58 +01:00
ipack pci: Trivial device model conversions to realize 2015-02-26 12:42:16 +01:00
ipmi ipmi: Add a force off function 2015-12-22 18:39:19 +02:00
isa isa: Clean up inappropriate hw_error() 2016-01-13 15:15:57 +01:00
lm32 ui/opengl: Reduce build required libraries for opengl 2015-11-03 10:13:42 +01:00
m68k hw: Don't use hw_error() for machine initialization errors 2016-01-13 11:58:58 +01:00
mem nvdimm: implement NVDIMM device abstract 2015-12-22 18:39:20 +02:00
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 moxie: Remove ELF_MACHINE from cpu.h 2015-09-25 12:04:43 +02:00
net etraxfs_eth: Don't use hw_error() in init() method 2016-01-13 11:58:58 +01:00
nvram fw_cfg: replace ioport data read with generic method 2015-12-15 11:46:13 +01:00
openrisc * First batch of MAINTAINERS updates 2015-09-25 21:52:30 +01:00
pci fix bad indentation in pcie_cap_slot_write_config() 2015-11-06 15:42:38 +03:00
pci-bridge hw/pxb: introduce pxb-pcie expander for PCIe machines 2015-12-22 17:45:13 +02:00
pci-host isa: Clean up error handling around isa_bus_new() 2016-01-13 11:58:59 +01:00
pcmcia hw: do not pass NULL to memory_region_init from instance_init 2015-10-09 15:25:56 +02:00
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 sdhci: add optional quirk property to disable card insertion/removal interrupts 2015-12-22 16:34:26 +08:00
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 sparc: Remove ELF_MACHINE from cpu.h 2015-09-25 12:04:44 +02:00
sparc64 target-sparc: Convert to VMStateDescription 2016-01-16 12:01:23 +00:00
ssi arm: Use g_new() & friends where that makes obvious sense 2015-09-07 10:39:27 +01:00
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 tricore: Remove ELF_MACHINE from cpu.h 2015-09-25 12:04:44 +02:00
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 i6300esb: remove muldiv64() 2015-09-25 14:52:17 +02:00
xen xen/Makefile.objs: simplify 2016-01-11 11:39:28 +03:00
xenpv xen: fix usage of xc_domain_create in domain builder 2015-11-13 17:38:06 +00:00
xtensa target-xtensa: xtfpga: attach FLASH to system IO 2015-10-21 21:28:33 +03:00
Makefile.objs Add a base IPMI interface 2015-12-22 18:39:19 +02:00