Skip to content
  • Marc Zyngier's avatar
    arm64: KVM: Allow far branches from vector slots to the main vectors · 71dcb8be
    Marc Zyngier authored
    
    
    So far, the branch from the vector slots to the main vectors can at
    most be 4GB from the main vectors (the reach of ADRP), and this
    distance is known at compile time. If we were to remap the slots
    to an unrelated VA, things would break badly.
    
    A way to achieve VA independence would be to load the absolute
    address of the vectors (__kvm_hyp_vector), either using a constant
    pool or a series of movs, followed by an indirect branch.
    
    This patches implements the latter solution, using another instance
    of a patching callback. Note that since we have to save a register
    pair on the stack, we branch to the *second* instruction in the
    vectors in order to compensate for it. This also results in having
    to adjust this balance in the invalid vector entry point.
    
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    71dcb8be