[PATCH 0/4] KVM: arm/arm64: vgic: Virtual interrupt grouping support
flat view
STALE3024d
From: andre.przywara@arm.com (Andre Przywara)
Date: 2018-06-25 09:59:06
Also in:
kvmarm
Hi, On 24/06/18 23:10, Christoffer Dall wrote:
This small series addresses a peculiarity of the current VGIC implementation, namely that we don't support interrupt grouping.
Nice one and seems straight forward enough. Just curious: Were there any complaints or even users of FIQs and/or interrupt grouping?
KVM either implements a GICv2 without support for the security extensions, or a GICv3 with DS=1. For GICv2, on systems without the security extensions, group 0 interrupts can be configured to be either signalled as FIQs or as IRQs by the VM, whereas group 1 interrupts are always IRQs. For GICv3, with DS=1, group 1 interrupts are always IRQs and group 0 interrupts are always FIQs, and there is no concept of secure vs. non-secure group 1 interrupts when DS=1. We were treating all interrupts on GICv2 as group 0, but yet telling the geust that they were group 1. The first patch changes this behavior, which seems to have no effect on no known guests, but still. The remaining patches introduce proper interrupt grouping support, along with MMIO accessors for the VM and userspace to retrieve and set the which group SGIs, PPIs, and SPIs belong to. LPIs are always group 1 interrupts as per the architecture, and there is no way to modify this configuration (no IGROUPR registers for LPIs or equivalent ITS commands). Lightly tested on Seattle, TX1, and the foundation model. I've run a GICv2 guest on a GICv3 host on the foundation model.
I take it those were regression tests with Linux guests? Do we have any means of testing this with guests which actually use different groups or FIQs? Does kvm-unit-tests cover this? Did you do any tests on 32 bit? I am going to fire up something on my Midway later today ... Cheers, Andre.
Applies to v4.18-rc1. Christoffer Dall (4): KVM: arm/arm64: GICv2 IGROUPR should read as zero KVM: arm/arm64: vgic: Add group field to struct irq KVM: arm/arm64: Signal IRQs using their configured group KVM: arm/arm64: vgic: Allow VMs to configure interrupt groups include/kvm/arm_vgic.h | 1 + include/linux/irqchip/arm-gic.h | 1 + virt/kvm/arm/vgic/vgic-debug.c | 8 ++++--- virt/kvm/arm/vgic/vgic-init.c | 11 +++++++-- virt/kvm/arm/vgic/vgic-its.c | 1 + virt/kvm/arm/vgic/vgic-mmio-v2.c | 2 +- virt/kvm/arm/vgic/vgic-mmio-v3.c | 2 +- virt/kvm/arm/vgic/vgic-mmio.c | 38 ++++++++++++++++++++++++++++++++ virt/kvm/arm/vgic/vgic-mmio.h | 6 +++++ virt/kvm/arm/vgic/vgic-v2.c | 3 +++ virt/kvm/arm/vgic/vgic-v3.c | 6 +---- 11 files changed, 67 insertions(+), 12 deletions(-)