• Alex Williamson's avatar
    virt: IRQ bypass manager · f73f8173
    Alex Williamson authored
    When a physical I/O device is assigned to a virtual machine through
    facilities like VFIO and KVM, the interrupt for the device generally
    bounces through the host system before being injected into the VM.
    However, hardware technologies exist that often allow the host to be
    bypassed for some of these scenarios.  Intel Posted Interrupts allow
    the specified physical edge interrupts to be directly injected into a
    guest when delivered to a physical processor while the vCPU is
    running.  ARM IRQ Forwarding allows forwarded physical interrupts to
    be directly deactivated by the guest.
    
    The IRQ bypass manager here is meant to provide the shim to connect
    interrupt producers, generally the host physical device driver, with
    interrupt consumers, generally the hypervisor, in order to configure
    these bypass mechanism.  To do this, we base the connection on a
    shared, opaque token.  For KVM-VFIO this is expected to be an
    eventfd_ctx since this is the connection we already use to connect an
    eventfd to an irqfd on the in-kernel path.  When a producer and
    consumer with matching tokens is found, callbacks via both registered
    participants allow the bypass facilities to be automatically enabled.
    Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Reviewed-by: default avatarEric Auger <eric.auger@linaro.org>
    Tested-by: default avatarEric Auger <eric.auger@linaro.org>
    Tested-by: default avatarFeng Wu <feng.wu@intel.com>
    Signed-off-by: default avatarFeng Wu <feng.wu@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    f73f8173
irqbypass.h 3.57 KB