]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: arm64: Don't map 'kvm_vgic_global_state' at EL2 with pKVM
authorWill Deacon <will@kernel.org>
Tue, 22 Oct 2024 14:40:16 +0000 (15:40 +0100)
committerOliver Upton <oliver.upton@linux.dev>
Wed, 23 Oct 2024 23:22:19 +0000 (23:22 +0000)
Now that 'kvm_vgic_global_state' is no longer needed for ICC_CTLR_EL1
emulation on machines with a broken SEIS implementation, drop the
pKVM hypervisor mapping of the page.

Note that kvm_vgic_global_state is still mapped in non-protected
hypervisor configurations (i.e. {n,h}VHE) through the rodata section
mapping.

Cc: Marc Zyngier <maz@kernel.org>
Cc: Oliver Upton <oliver.upton@linux.dev>
Signed-off-by: Will Deacon <will@kernel.org>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20241022144016.27350-3-will@kernel.org
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/hyp/nvhe/setup.c

index 174007f3faddd9ab151c087e506f506e1d910e3e..8fec099c277571558ed8999857b7bead122ce26a 100644 (file)
@@ -95,7 +95,6 @@ static int recreate_hyp_mappings(phys_addr_t phys, unsigned long size,
 {
        void *start, *end, *virt = hyp_phys_to_virt(phys);
        unsigned long pgt_size = hyp_s1_pgtable_pages() << PAGE_SHIFT;
-       enum kvm_pgtable_prot prot;
        int ret, i;
 
        /* Recreate the hyp page-table using the early page allocator */
@@ -148,22 +147,6 @@ static int recreate_hyp_mappings(phys_addr_t phys, unsigned long size,
        }
 
        pkvm_create_host_sve_mappings();
-
-       /*
-        * Map the host sections RO in the hypervisor, but transfer the
-        * ownership from the host to the hypervisor itself to make sure they
-        * can't be donated or shared with another entity.
-        *
-        * The ownership transition requires matching changes in the host
-        * stage-2. This will be done later (see finalize_host_mappings()) once
-        * the hyp_vmemmap is addressable.
-        */
-       prot = pkvm_mkstate(PAGE_HYP_RO, PKVM_PAGE_SHARED_OWNED);
-       ret = pkvm_create_mappings(&kvm_vgic_global_state,
-                                  &kvm_vgic_global_state + 1, prot);
-       if (ret)
-               return ret;
-
        return 0;
 }