qemu-e2k/include/sysemu
Peter Xu c82d9d43ed KVM: Kick resamplefd for split kernel irqchip
This is majorly only for X86 because that's the only one that supports
split irqchip for now.

When the irqchip is split, we face a dilemma that KVM irqfd will be
enabled, however the slow irqchip is still running in the userspace.
It means that the resamplefd in the kernel irqfds won't take any
effect and it will miss to ack INTx interrupts on EOIs.

One example is split irqchip with VFIO INTx, which will break if we
use the VFIO INTx fast path.

This patch can potentially supports the VFIO fast path again for INTx,
that the IRQ delivery will still use the fast path, while we don't
need to trap MMIOs in QEMU for the device to emulate the EIOs (see the
callers of vfio_eoi() hook).  However the EOI of the INTx will still
need to be done from the userspace by caching all the resamplefds in
QEMU and kick properly for IOAPIC EOI broadcast.

This is tricky because in this case the userspace ioapic irr &
remote-irr will be bypassed.  However such a change will greatly boost
performance for assigned devices using INTx irqs (TCP_RR boosts 46%
after this patch applied).

When the userspace is responsible for the resamplefd kickup, don't
register it on the kvm_irqfd anymore, because on newer kernels (after
commit 654f1f13ea56, 5.2+) the KVM_IRQFD will fail if with both split
irqchip and resamplefd.  This will make sure that the fast path will
work for all supported kernels.

https://patchwork.kernel.org/patch/10738541/#22609933

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20200318145204.74483-5-peterx@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-06-10 12:10:33 -04:00
..
accel.h accel: Introduce the current_accel() wrapper 2020-01-24 20:59:11 +01:00
arch_init.h Add rx-softmmu 2020-03-19 17:58:05 +01:00
balloon.h include: Make headers more self-contained 2019-08-16 13:31:51 +02:00
block-backend.h block: Add blk_make_empty() 2020-05-18 19:05:25 +02:00
blockdev.h monitor/hmp: move hmp_drive_del and hmp_commit to block-hmp-cmds.c 2020-03-09 18:05:33 +00:00
cpus.h tcg: convert "-accel threads" to a QOM property 2019-12-17 19:32:27 +01:00
cryptodev-vhost-user.h include: Make headers more self-contained 2019-08-16 13:31:51 +02:00
cryptodev-vhost.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
cryptodev.h misc: Replace zero-length arrays with flexible array member (automatic) 2020-03-16 22:07:42 +01:00
device_tree.h device_tree: Constify compat in qemu_fdt_node_path() 2020-04-30 15:35:41 +01:00
dma.h Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
dump-arch.h dump: allow target to set the physical base 2016-01-15 14:40:25 +00:00
dump.h qapi: Split dump.json off misc.json 2019-07-02 13:37:00 +02:00
hax.h Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
hostmem.h hostmem: fix strict bind policy 2020-02-19 16:50:02 +00:00
hvf.h Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
hw_accel.h hw/core: Move cpu.c, cpu.h from qom/ to hw/core/ 2019-08-21 13:24:01 +02:00
iothread.h include: Make headers more self-contained 2019-08-16 13:31:51 +02:00
kvm_int.h KVM: Move hwpoison page related functions into kvm-all.c 2020-05-14 15:03:09 +01:00
kvm.h KVM: Kick resamplefd for split kernel irqchip 2020-06-10 12:10:33 -04:00
memory_mapping.h Clean up inclusion of exec/cpu-common.h 2019-08-16 13:31:52 +02:00
numa.h initialize MachineState::ram in NUMA case 2020-02-19 16:49:53 +00:00
os-posix.h util: drop old utimensat() compat code 2017-05-25 10:30:14 +02:00
os-win32.h glib: use portable g_setenv() 2019-12-17 09:05:23 +01:00
qtest.h qtest: add in-process incoming command handler 2020-02-22 08:26:48 +00:00
replay.h replay: record and replay random number sources 2020-01-07 12:08:39 +01:00
reset.h hw: move reset handlers from vl.c to hw/core 2017-01-16 17:52:35 +01:00
rng-random.h rng-random: rename RndRandom to RngRandom 2016-05-23 12:18:43 +05:30
rng.h virtio-rng: change default backend to rng-builtin 2019-09-04 06:32:51 -04:00
runstate.h pvpanic: implement crashloaded event handling 2020-01-24 20:59:07 +01:00
seccomp.h sandbox: disable -sandbox if CONFIG_SECCOMP undefined 2018-06-01 13:44:15 +02:00
sev.h kvm: introduce memory encryption APIs 2018-03-13 12:04:03 +01:00
sysemu.h qom/object: Move Object typedef to 'qemu/typedefs.h' 2020-06-10 12:09:36 -04:00
tcg.h qemu-common: Move tcg_enabled() etc. to sysemu/tcg.h 2019-06-11 20:22:09 +02:00
tpm_backend.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
tpm.h tpm: Add the SysBus TPM TIS device 2020-03-05 12:18:08 -05:00
vhost-user-backend.h Add vhost-user-backend 2019-05-10 12:48:35 +02:00
watchdog.h Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
whpx.h WHPX: TSC get and set should be dependent on VM state 2020-03-16 23:02:21 +01:00
xen-mapcache.h include: Make headers more self-contained 2019-08-16 13:31:51 +02:00
xen.h accel: Move Xen accelerator code under accel/xen/ 2020-06-10 12:09:56 -04:00