KVM: host side for eoi optimization
authorMichael S. Tsirkin <mst@redhat.com>
Sun, 24 Jun 2012 16:25:07 +0000 (19:25 +0300)
committerAvi Kivity <avi@redhat.com>
Mon, 25 Jun 2012 09:40:55 +0000 (12:40 +0300)
commitae7a2a3fb6f8b784c2752863f4f1f20c656f76fb
tree5f4053265d244bb12ccff88494d70124b6d603c3
parentd905c0693514e6f713b207377b67c9972c5d7d49
KVM: host side for eoi optimization

Implementation of PV EOI using shared memory.
This reduces the number of exits an interrupt
causes as much as by half.

The idea is simple: there's a bit, per APIC, in guest memory,
that tells the guest that it does not need EOI.
We set it before injecting an interrupt and clear
before injecting a nested one. Guest tests it using
a test and clear operation - this is necessary
so that host can detect interrupt nesting -
and if set, it can skip the EOI MSR.

There's a new MSR to set the address of said register
in guest memory. Otherwise not much changed:
- Guest EOI is not required
- Register is tested & ISR is automatically cleared on exit

For testing results see description of previous patch
'kvm_para: guest side for eoi avoidance'.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/cpuid.c
arch/x86/kvm/lapic.c
arch/x86/kvm/lapic.h
arch/x86/kvm/trace.h
arch/x86/kvm/x86.c