• Christian Borntraeger's avatar
    KVM: s390: optimize wakeup for exitless interrupts · a9810327
    Christian Borntraeger authored
    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: default avatarHalil Pasic <pasic@linux.vnet.ibm.com>
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
    Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    a9810327
interrupt.c 75.3 KB