• Marcelo Tosatti's avatar
    KVM: PIC: enhance IPI avoidance · e4825800
    Marcelo Tosatti authored
    The PIC code makes little effort to avoid kvm_vcpu_kick(), resulting in
    unnecessary guest exits in some conditions.
    
    For example, if the timer interrupt is routed through the IOAPIC, IRR
    for IRQ 0 will get set but not cleared, since the APIC is handling the
    acks.
    
    This means that everytime an interrupt < 16 is triggered, the priority
    logic will find IRQ0 pending and send an IPI to vcpu0 (in case IRQ0 is
    not masked, which is Linux's case).
    
    Introduce a new variable isr_ack to represent the IRQ's for which the
    guest has been signalled / cleared the ISR. Use it to avoid more than
    one IPI per trigger-ack cycle, in addition to the avoidance when ISR is
    set in get_priority().
    Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
    e4825800
i8259.c 10.5 KB