• Andre Przywara's avatar
    KVM: arm64: vgic-its: Implement ITS command queue command handlers · df9f58fb
    Andre Przywara authored
    The connection between a device, an event ID, the LPI number and the
    associated CPU is stored in in-memory tables in a GICv3, but their
    format is not specified by the spec. Instead software uses a command
    queue in a ring buffer to let an ITS implementation use its own
    format.
    Implement handlers for the various ITS commands and let them store
    the requested relation into our own data structures. Those data
    structures are protected by the its_lock mutex.
    Our internal ring buffer read and write pointers are protected by the
    its_cmd mutex, so that only one VCPU per ITS can handle commands at
    any given time.
    Error handling is very basic at the moment, as we don't have a good
    way of communicating errors to the guest (usually an SError).
    The INT command handler is missing from this patch, as we gain the
    capability of actually injecting MSIs into the guest only later on.
    Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
    Reviewed-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Tested-by: default avatarEric Auger <eric.auger@redhat.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    df9f58fb
vgic-its.c 36.6 KB