mirror of https://gitee.com/openkylin/linux.git
arm64: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall
Let's define a new stub hypercall that resets the HYP configuration to its default: hyp-stub vectors, and MMU disabled. Of course, for the hyp-stub itself, this is a trivial no-op. Hypervisors will have a bit more work to do. Acked-by: Catalin Marinas <catalin.marinas@arm.com> Reviewed-by: James Morse <james.morse@arm.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Christoffer Dall <cdall@linaro.org>
This commit is contained in:
parent
810c86ee4e
commit
fd0e0c6170
|
@ -44,6 +44,14 @@
|
||||||
*/
|
*/
|
||||||
#define HVC_SOFT_RESTART 2
|
#define HVC_SOFT_RESTART 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HVC_RESET_VECTORS - Restore the vectors to the original HYP stubs
|
||||||
|
*/
|
||||||
|
#define HVC_RESET_VECTORS 3
|
||||||
|
|
||||||
|
/* Max number of HYP stub hypercalls */
|
||||||
|
#define HVC_STUB_HCALL_NR 4
|
||||||
|
|
||||||
/* Error returned when an invalid stub number is passed into x0 */
|
/* Error returned when an invalid stub number is passed into x0 */
|
||||||
#define HVC_STUB_ERR 0xbadca11
|
#define HVC_STUB_ERR 0xbadca11
|
||||||
|
|
||||||
|
@ -70,6 +78,7 @@ extern u32 __boot_cpu_mode[2];
|
||||||
|
|
||||||
void __hyp_set_vectors(phys_addr_t phys_vector_base);
|
void __hyp_set_vectors(phys_addr_t phys_vector_base);
|
||||||
phys_addr_t __hyp_get_vectors(void);
|
phys_addr_t __hyp_get_vectors(void);
|
||||||
|
void __hyp_reset_vectors(void);
|
||||||
|
|
||||||
/* Reports the availability of HYP mode */
|
/* Reports the availability of HYP mode */
|
||||||
static inline bool is_hyp_mode_available(void)
|
static inline bool is_hyp_mode_available(void)
|
||||||
|
|
|
@ -73,8 +73,11 @@ el1_sync:
|
||||||
mov x1, x3
|
mov x1, x3
|
||||||
br x4 // no return
|
br x4 // no return
|
||||||
|
|
||||||
|
3: cmp x0, #HVC_RESET_VECTORS
|
||||||
|
beq 9f // Nothing to reset!
|
||||||
|
|
||||||
/* Someone called kvm_call_hyp() against the hyp-stub... */
|
/* Someone called kvm_call_hyp() against the hyp-stub... */
|
||||||
3: ldr x0, =HVC_STUB_ERR
|
ldr x0, =HVC_STUB_ERR
|
||||||
|
|
||||||
9: eret
|
9: eret
|
||||||
ENDPROC(el1_sync)
|
ENDPROC(el1_sync)
|
||||||
|
@ -127,3 +130,9 @@ ENTRY(__hyp_set_vectors)
|
||||||
hvc #0
|
hvc #0
|
||||||
ret
|
ret
|
||||||
ENDPROC(__hyp_set_vectors)
|
ENDPROC(__hyp_set_vectors)
|
||||||
|
|
||||||
|
ENTRY(__hyp_reset_vectors)
|
||||||
|
mov x0, #HVC_RESET_VECTORS
|
||||||
|
hvc #0
|
||||||
|
ret
|
||||||
|
ENDPROC(__hyp_reset_vectors)
|
||||||
|
|
Loading…
Reference in New Issue