Skip to content
  • Jan Kiszka's avatar
    kvmvapic: Introduce TPR access optimization for Windows guests · e5ad936b
    Jan Kiszka authored
    
    
    This enables acceleration for MMIO-based TPR registers accesses of
    32-bit Windows guest systems. It is mostly useful with KVM enabled,
    either on older Intel CPUs (without flexpriority feature, can also be
    manually disabled for testing) or any current AMD processor.
    
    The approach introduced here is derived from the original version of
    qemu-kvm. It was refactored, documented, and extended by support for
    user space APIC emulation, both with and without KVM acceleration. The
    VMState format was kept compatible, so was the ABI to the option ROM
    that implements the guest-side para-virtualized driver service. This
    enables seamless migration from qemu-kvm to upstream or, one day,
    between KVM and TCG mode.
    
    The basic concept goes like this:
     - VAPIC PV interface consisting of I/O port 0x7e and (for KVM in-kernel
       irqchip) a vmcall hypercall is registered
     - VAPIC option ROM is loaded into guest
     - option ROM activates TPR MMIO access reporting via port 0x7e
     - TPR accesses are trapped and patched in the guest to call into option
       ROM instead, VAPIC support is enabled
     - option ROM TPR helpers track state in memory and invoke hypercall to
       poll for pending IRQs if required
    
    Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
    e5ad936b