• Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Use OPAL XICS emulation on POWER9 · f725758b
    Paul Mackerras authored
    POWER9 includes a new interrupt controller, called XIVE, which is
    quite different from the XICS interrupt controller on POWER7 and
    POWER8 machines.  KVM-HV accesses the XICS directly in several places
    in order to send and clear IPIs and handle interrupts from PCI
    devices being passed through to the guest.
    
    In order to make the transition to XIVE easier, OPAL firmware will
    include an emulation of XICS on top of XIVE.  Access to the emulated
    XICS is via OPAL calls.  The one complication is that the EOI
    (end-of-interrupt) function can now return a value indicating that
    another interrupt is pending; in this case, the XIVE will not signal
    an interrupt in hardware to the CPU, and software is supposed to
    acknowledge the new interrupt without waiting for another interrupt
    to be delivered in hardware.
    
    This adapts KVM-HV to use the OPAL calls on machines where there is
    no XICS hardware.  When there is no XICS, we look for a device-tree
    node with "ibm,opal-intc" in its compatible property, which is how
    OPAL indicates that it provides XICS emulation.
    
    In order to handle the EOI return value, kvmppc_read_intr() has
    become kvmppc_read_one_intr(), with a boolean variable passed by
    reference which can be set by the EOI functions to indicate that
    another interrupt is pending.  The new kvmppc_read_intr() keeps
    calling kvmppc_read_one_intr() until there are no more interrupts
    to process.  The return value from kvmppc_read_intr() is the
    largest non-zero value of the returns from kvmppc_read_one_intr().
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    f725758b
book3s_hv_rm_xics.c 22.7 KB