• Christoffer Dall's avatar
    KVM: ARM: Hypervisor initialization · 342cd0ab
    Christoffer Dall authored
    Sets up KVM code to handle all exceptions taken to Hyp mode.
    
    When the kernel is booted in Hyp mode, calling an hvc instruction with r0
    pointing to the new vectors, the HVBAR is changed to the the vector pointers.
    This allows subsystems (like KVM here) to execute code in Hyp-mode with the
    MMU disabled.
    
    We initialize other Hyp-mode registers and enables the MMU for Hyp-mode from
    the id-mapped hyp initialization code. Afterwards, the HVBAR is changed to
    point to KVM Hyp vectors used to catch guest faults and to switch to Hyp mode
    to perform a world-switch into a KVM guest.
    
    Also provides memory mapping code to map required code pages, data structures,
    and I/O regions  accessed in Hyp mode at the same virtual address as the host
    kernel virtual addresses, but which conforms to the architectural requirements
    for translations in Hyp mode. This interface is added in arch/arm/kvm/arm_mmu.c
    and comprises:
     - create_hyp_mappings(from, to);
     - create_hyp_io_mappings(from, to, phys_addr);
     - free_hyp_pmds();
    Reviewed-by: default avatarWill Deacon <will.deacon@arm.com>
    Reviewed-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarChristoffer Dall <c.dall@virtualopensystems.com>
    342cd0ab
arm.c 10.6 KB