KVM: arm64: pkvm: Disable GICv2 support
authorQuentin Perret <qperret@google.com>
Wed, 8 Dec 2021 15:22:55 +0000 (15:22 +0000)
committerMarc Zyngier <maz@kernel.org>
Wed, 15 Dec 2021 14:16:28 +0000 (14:16 +0000)
GICv2 requires having device mappings in guests and the hypervisor,
which is incompatible with the current pKVM EL2 page ownership model
which only covers memory. While it would be desirable to support pKVM
with GICv2, this will require a lot more work, so let's make the
current assumption clear until then.

Co-developed-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Quentin Perret <qperret@google.com>
Acked-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20211208152300.2478542-3-qperret@google.com
arch/arm64/kvm/vgic/vgic-v2.c
arch/arm64/kvm/vgic/vgic-v3.c

index 95a18cec14a35036ca4c6c2e3446f5a1cb646935..8e337a0d78178a7ce00e7e1536070f2be0c66928 100644 (file)
@@ -345,6 +345,11 @@ int vgic_v2_probe(const struct gic_kvm_info *info)
        int ret;
        u32 vtr;
 
+       if (is_protected_kvm_enabled()) {
+               kvm_err("GICv2 not supported in protected mode\n");
+               return -ENXIO;
+       }
+
        if (!info->vctrl.start) {
                kvm_err("GICH not present in the firmware table\n");
                return -ENXIO;
index 04f62c4b07fb5f590849261107c2b83aaed07767..debad4e6e6c90314716af3e31718fa14ebd1bf47 100644 (file)
@@ -651,7 +651,7 @@ int vgic_v3_probe(const struct gic_kvm_info *info)
        } else if (!PAGE_ALIGNED(info->vcpu.start)) {
                pr_warn("GICV physical address 0x%llx not page aligned\n",
                        (unsigned long long)info->vcpu.start);
-       } else {
+       } else if (kvm_get_mode() != KVM_MODE_PROTECTED) {
                kvm_vgic_global_state.vcpu_base = info->vcpu.start;
                kvm_vgic_global_state.can_emulate_gicv2 = true;
                ret = kvm_register_vgic_device(KVM_DEV_TYPE_ARM_VGIC_V2);