KVM: s390: optimize wakeup for exitless interrupts
authorChristian Borntraeger <borntraeger@de.ibm.com>
Mon, 29 Jan 2018 11:22:45 +0000 (12:22 +0100)
committerChristian Borntraeger <borntraeger@de.ibm.com>
Wed, 14 Feb 2018 08:16:42 +0000 (08:16 +0000)
commita9810327726b01404ecde082c075a7468c433ddf
treedd8553dc823ea01e9d7b4803933c6e1febdc15ff
parent7928b2cbe55b2a410a0f5c1f154610059c57b1b2
KVM: s390: optimize wakeup for exitless interrupts

For interrupt injection of floating interrupts we queue the interrupt
either in the GISA or in the floating  interrupt list. The first CPU
that looks at these data structures - either in KVM code or hardware
will then deliver that interrupt. To minimize latency we also:
-a: choose a VCPU to deliver that interrupt. We prefer idle CPUs
-b: we wake up the host thread that runs the VCPU
-c: set an I/O intervention bit for that CPU so that it exits guest
    context as soon as the PSW I/O mask is enabled
This will make sure that this CPU will execute the interrupt delivery
code of KVM very soon.

We can now optimize the injection case if we have exitless interrupts.
The wakeup is still necessary in case the target CPU sleeps. We can
avoid the I/O intervention request bit though. Whenever this
intervention request would be handled, the hardware could also directly
inject the interrupt on that CPU, no need to go through the interrupt
injection loop of KVM.

Cc: Michael Mueller <mimu@linux.vnet.ibm.com>
Reviewed-by: Halil Pasic <pasic@linux.vnet.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>
arch/s390/kvm/interrupt.c