lkml.org 
[lkml]   [2019]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v8 3/9] KVM: arm64: Move hyp_symbol_addr to fix dependency
    Date
    Currently hyp_symbol_addr is placed in kvm_mmu.h which is mostly
    used by __hyp_this_cpu_ptr in kvm_asm.h but it cannot include
    kvm_mmu.h directly as kvm_mmu.h uses kvm_ksym_ref which is
    defined inside kvm_asm.h. Hence, hyp_symbol_addr is moved inside
    kvm_asm.h to fix this dependency on each other.

    Also, hyp_symbol_addr corresponding counterpart, kvm_ksym_ref,
    is already in kvm_asm.h, making it more sensible to move
    kvm_symbol_addr to the same file.

    Suggested by: James Morse <james.morse@arm.com>
    Signed-off-by: Amit Daniel Kachhap <amit.kachhap@arm.com>
    Reviewed-by: Julien Thierry <julien.thierry@arm.com>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Cc: Christoffer Dall <christoffer.dall@arm.com>
    Cc: kvmarm@lists.cs.columbia.edu
    ---

    Changes since v7:
    * Slight change in commit message [Julien Thierry].

    arch/arm64/include/asm/kvm_asm.h | 20 ++++++++++++++++++++
    arch/arm64/include/asm/kvm_mmu.h | 20 --------------------
    2 files changed, 20 insertions(+), 20 deletions(-)

    diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
    index f5b79e9..57a07e8 100644
    --- a/arch/arm64/include/asm/kvm_asm.h
    +++ b/arch/arm64/include/asm/kvm_asm.h
    @@ -80,6 +80,26 @@ extern void __vgic_v3_init_lrs(void);

    extern u32 __kvm_get_mdcr_el2(void);

    +/*
    + * Obtain the PC-relative address of a kernel symbol
    + * s: symbol
    + *
    + * The goal of this macro is to return a symbol's address based on a
    + * PC-relative computation, as opposed to a loading the VA from a
    + * constant pool or something similar. This works well for HYP, as an
    + * absolute VA is guaranteed to be wrong. Only use this if trying to
    + * obtain the address of a symbol (i.e. not something you obtained by
    + * following a pointer).
    + */
    +#define hyp_symbol_addr(s) \
    + ({ \
    + typeof(s) *addr; \
    + asm("adrp %0, %1\n" \
    + "add %0, %0, :lo12:%1\n" \
    + : "=r" (addr) : "S" (&s)); \
    + addr; \
    + })
    +
    /* Home-grown __this_cpu_{ptr,read} variants that always work at HYP */
    #define __hyp_this_cpu_ptr(sym) \
    ({ \
    diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h
    index b0742a1..3dea6af 100644
    --- a/arch/arm64/include/asm/kvm_mmu.h
    +++ b/arch/arm64/include/asm/kvm_mmu.h
    @@ -118,26 +118,6 @@ static inline unsigned long __kern_hyp_va(unsigned long v)
    #define kern_hyp_va(v) ((typeof(v))(__kern_hyp_va((unsigned long)(v))))

    /*
    - * Obtain the PC-relative address of a kernel symbol
    - * s: symbol
    - *
    - * The goal of this macro is to return a symbol's address based on a
    - * PC-relative computation, as opposed to a loading the VA from a
    - * constant pool or something similar. This works well for HYP, as an
    - * absolute VA is guaranteed to be wrong. Only use this if trying to
    - * obtain the address of a symbol (i.e. not something you obtained by
    - * following a pointer).
    - */
    -#define hyp_symbol_addr(s) \
    - ({ \
    - typeof(s) *addr; \
    - asm("adrp %0, %1\n" \
    - "add %0, %0, :lo12:%1\n" \
    - : "=r" (addr) : "S" (&s)); \
    - addr; \
    - })
    -
    -/*
    * We currently support using a VM-specified IPA size. For backward
    * compatibility, the default IPA size is fixed to 40bits.
    */
    --
    2.7.4
    \
     
     \ /
      Last update: 2019-04-02 04:28    [W:3.033 / U:0.212 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site