lkml.org 
[lkml]   [2020]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 16/24] kvm: arm64: Add offset for hyp VA <-> PA conversion
    Date
    Add a host-initialized constant to KVM nVHE hyp code for converting
    between EL2 linear map virtual addresses and physical addresses.
    Also add `__hyp_pa` macro that performs the conversion.

    Signed-off-by: David Brazdil <dbrazdil@google.com>
    ---
    arch/arm64/kvm/arm.c | 15 +++++++++++++++
    arch/arm64/kvm/hyp/nvhe/psci.c | 3 +++
    2 files changed, 18 insertions(+)

    diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
    index 28e3bc056225..dc7d43d7785a 100644
    --- a/arch/arm64/kvm/arm.c
    +++ b/arch/arm64/kvm/arm.c
    @@ -1484,6 +1484,20 @@ static inline void hyp_cpu_pm_exit(void)
    }
    #endif

    +static void init_hyp_physvirt_offset(void)
    +{
    + extern s64 kvm_nvhe_sym(hyp_physvirt_offset);
    + unsigned long kern_vaddr, hyp_vaddr, paddr;
    +
    + /* Check that kvm_arm_hyp_percpu_base has been set. */
    + BUG_ON(kvm_arm_hyp_percpu_base[0] == 0);
    +
    + kern_vaddr = kvm_arm_hyp_percpu_base[0];
    + hyp_vaddr = kern_hyp_va(kern_vaddr);
    + paddr = __pa(kern_vaddr);
    + CHOOSE_NVHE_SYM(hyp_physvirt_offset) = (s64)paddr - (s64)hyp_vaddr;
    +}
    +
    static void init_cpu_logical_map(void)
    {
    extern u64 kvm_nvhe_sym(__cpu_logical_map)[NR_CPUS];
    @@ -1688,6 +1702,7 @@ static int init_hyp_mode(void)
    }
    }

    + init_hyp_physvirt_offset();
    init_cpu_logical_map();
    init_psci();

    diff --git a/arch/arm64/kvm/hyp/nvhe/psci.c b/arch/arm64/kvm/hyp/nvhe/psci.c
    index 82d3b2c89658..b0b5df590ba5 100644
    --- a/arch/arm64/kvm/hyp/nvhe/psci.c
    +++ b/arch/arm64/kvm/hyp/nvhe/psci.c
    @@ -16,6 +16,9 @@
    /* Config options set by the host. */
    u32 kvm_host_psci_version = PSCI_VERSION(0, 0);
    u32 kvm_host_psci_function_id[PSCI_FN_MAX];
    +s64 hyp_physvirt_offset;
    +
    +#define __hyp_pa(x) ((phys_addr_t)((x)) + hyp_physvirt_offset)

    static u64 get_psci_func_id(struct kvm_cpu_context *host_ctxt)
    {
    --
    2.29.2.222.g5d2a92d10f8-goog
    \
     
     \ /
      Last update: 2020-11-09 12:34    [W:6.253 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site