mirror of https://gitee.com/openkylin/linux.git
KVM: arm64: Move hyp_symbol_addr() to kvm_asm.h
Recent refactoring of the arm64 code make it awkward to have hyp_symbol_addr() in kvm_mmu.h. Instead, move it next to its main user, which is __hyp_this_cpu_ptr(). Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
parent
07da1ffaa1
commit
304e2989c9
|
@ -81,6 +81,26 @@ extern u32 __kvm_get_mdcr_el2(void);
|
||||||
|
|
||||||
extern char __smccc_workaround_1_smc[__SMCCC_WORKAROUND_1_SMC_SZ];
|
extern char __smccc_workaround_1_smc[__SMCCC_WORKAROUND_1_SMC_SZ];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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,
|
* Home-grown __this_cpu_{ptr,read} variants that always work at HYP,
|
||||||
* provided that sym is really a *symbol* and not a pointer obtained from
|
* provided that sym is really a *symbol* and not a pointer obtained from
|
||||||
|
|
|
@ -107,26 +107,6 @@ static __always_inline unsigned long __kern_hyp_va(unsigned long v)
|
||||||
|
|
||||||
#define kern_hyp_va(v) ((typeof(v))(__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
|
* We currently support using a VM-specified IPA size. For backward
|
||||||
* compatibility, the default IPA size is fixed to 40bits.
|
* compatibility, the default IPA size is fixed to 40bits.
|
||||||
|
|
Loading…
Reference in New Issue