[PATCH 0/9] In-kernel XICS interrupt controller emulation

Paul Mackerras
2013-02-14T23:59:07Z

This patch series implements in-kernel emulation of the XICS interrupt
controller architecture defined in PAPR (Power Architecture Platform
Requirements, the document that defines IBM's pSeries platform
architecture).

One of the things I have done in this version is to provide a way for
this to coexist with other interrupt controller emulations. The XICS
emulation exports a vector of function pointers that the generic
book3s code uses to call in to it. Other emulations could set this
vector to point to their own functions. (I realize that Scott Wood's
recently-posted patch series uses an entirely orthogonal approach and
may or may not find this useful.)

The interface defined here consists of:

* KVM_CREATE_IRQCHIP_ARGS: like KVM_CREATE_IRQCHIP but takes an
argument struct containing a `type' field, specifying what overall
interrupt controller architecture to emulate, and a `param' field
(unused by the XICS emulation). This is only called once per VM,
before VCPUs are created.

* KVM_IRQCHIP_SET_SOURCES: used to create and configure interrupt
sources in bulk. The notion of "interrupt source" is fairly
generic; a source has an identifying number (20 bits in the current
implementation), a priority, a destination (a vcpu number or
potentially a vcpu group identifier), plus flags indicating
edge/level sensitivity, a masked bit, and a pending bit.

* KVM_IRQCHIP_GET_SOURCES: used to query the configuration and status
of interrupt sources in bulk.

* A 64-bit one_reg identifier, KVM_REG_PPC_ICP_STATE, used to get and
set per-vcpu interrupt controller state (per-vcpu priority,
interrupt status, and pending IPI and interrupt state).

I believe this corresponds reasonably well to what was discussed at
KVM Forum.

This series is against Alex's kvm-ppc-queue branch, although it also
applies cleanly on the kvm tree's next branch.

Paul.