On Thu, 25 Jan 2018 18:06:06 +0100 Christian Borntraeger <borntraeger@xxxxxxxxxx> wrote: > From: Michael Mueller <mimu@xxxxxxxxxxxxxxxxxx> > > 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 (inclusive virtio) if it's available. When using AIV, the s/inclusive/including/ > 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@xxxxxxxxxxxxxxxxxx> > Acked-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > --- > arch/s390/include/asm/kvm_host.h | 1 + > arch/s390/kvm/interrupt.c | 93 ++++++++++++++++++++++++++++++++-------- > arch/s390/kvm/kvm-s390.c | 8 ++++ > arch/s390/kvm/kvm-s390.h | 3 ++ > 4 files changed, 87 insertions(+), 18 deletions(-) > Reviewed-by: Cornelia Huck <cohuck@xxxxxxxxxx>