linux/arch/s390
Michael Mueller d7c5cb0105 KVM: s390: exploit GISA and AIV for emulated interrupts
The adapter interruption virtualization (AIV) facility is an
optional facility that comes with functionality expected to increase
the performance of adapter interrupt handling for both emulated and
passed-through adapter interrupts. With AIV, adapter interrupts can be
delivered to the guest without exiting SIE.

This patch provides some preparations for using AIV for emulated adapter
interrupts (including virtio) if it's available. When using AIV, the
interrupts are delivered at the so called GISA by setting the bit
corresponding to its Interruption Subclass (ISC) in the Interruption
Pending Mask (IPM) instead of inserting a node into the floating interrupt
list.

To keep the change reasonably small, the handling of this new state is
deferred in get_all_floating_irqs and handle_tpi. This patch concentrates
on the code handling enqueuement of emulated adapter interrupts, and their
delivery to the guest.

Note that care is still required for adapter interrupts using AIV,
because there is no guarantee that AIV is going to deliver the adapter
interrupts pending at the GISA (consider all vcpus idle). When delivering
GISA adapter interrupts by the host (usual mechanism) special attention
is required to honor interrupt priorities.

Empirical results show that the time window between making an interrupt
pending at the GISA and doing kvm_s390_deliver_pending_interrupts is
sufficient for a guest with at least moderate cpu activity to get adapter
interrupts delivered within the SIE, and potentially save some SIE exits
(if not other deliverable interrupts).

The code will be activated with a follow-up patch.

Signed-off-by: Michael Mueller <mimu@linux.vnet.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
2018-01-26 11:11:39 +01:00
..
appldata s390: add a few more SPDX identifiers 2017-12-05 07:51:09 +01:00
boot s390: add a few more SPDX identifiers 2017-12-05 07:51:09 +01:00
configs s390: Remove CONFIG_HARDENED_USERCOPY 2017-11-16 13:12:21 +01:00
crypto s390: Remove redudant license text 2017-12-05 07:51:09 +01:00
hypfs s390: add a few more SPDX identifiers 2017-12-05 07:51:09 +01:00
include KVM: s390: exploit GISA and AIV for emulated interrupts 2018-01-26 11:11:39 +01:00
kernel s390: fix compat system call table 2017-12-07 07:49:46 +01:00
kvm KVM: s390: exploit GISA and AIV for emulated interrupts 2018-01-26 11:11:39 +01:00
lib s390/spinlock: fix indentation 2017-11-14 22:07:58 +01:00
mm s390x/mm: simplify gmap_protect_rmap() 2018-01-24 16:16:57 +01:00
net s390: add a few more SPDX identifiers 2017-12-05 07:51:09 +01:00
numa s390: add a few more SPDX identifiers 2017-12-05 07:51:09 +01:00
oprofile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pci s390: add a few more SPDX identifiers 2017-12-05 07:51:09 +01:00
tools s390: add a few more SPDX identifiers 2017-12-05 07:51:09 +01:00
defconfig s390: update defconfig 2017-10-16 08:19:28 +02:00
Kbuild s390: add a few more SPDX identifiers 2017-12-05 07:51:09 +01:00
Kconfig s390/perf: add perf_regs support and user stack dump 2017-11-16 15:06:11 +01:00
Kconfig.debug License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
Makefile s390: Remove redundant license text 2017-11-24 15:37:24 +01:00