Page MenuHomeFreeBSD

D10094.id26538.diff
No OneTemporary

D10094.id26538.diff

Index: sys/arm/arm/hypervisor-stub.S
===================================================================
--- sys/arm/arm/hypervisor-stub.S
+++ sys/arm/arm/hypervisor-stub.S
@@ -33,11 +33,15 @@
__FBSDID("$FreeBSD$");
#if __ARM_ARCH >= 7
-#if defined(__ARM_ARCH_7VE__) || defined(__clang__)
.arch_extension virt
-#endif
ASENTRY_NP(hypervisor_stub_vect_install)
+ /* Leave HYP mode */
+ mrs r0, cpsr
+ and r0, r0, #(PSR_MODE) /* Mode is in the low 5 bits of CPSR */
+ teq r0, #(PSR_HYP32_MODE) /* Hyp Mode? */
+ movne r0, #-1
+ RETne
/* Install hypervisor stub vectors. */
adr r0, hypervisor_stub_vect
@@ -53,10 +57,18 @@
/* Don't disable access to perf-mon from PL0,1 and preserve HPMN. */
mrc CP15_HDCR(r0)
and r0, #(ARM_CP15_HDCR_HPMN)
- /* Caller implicit instruction barrier in the ERET. */
+ /* Caller implicit instruction barrier in the ERET. */
mcr CP15_HDCR(r0)
- RET
+ mrs r0, cpsr
+ bic r0, r0, #(PSR_MODE)
+ orr r0, r0, #(PSR_SVC32_MODE)
+ orr r0, r0, #(PSR_I | PSR_F | PSR_A)
+ msr spsr_cxsf, r0
+ mov r0, #0
+ /* Exit hypervisor mode */
+ msr elr_hyp, lr
+ eret
END(hypervisor_stub_vect_install)
Index: sys/arm/arm/locore-v6.S
===================================================================
--- sys/arm/arm/locore-v6.S
+++ sys/arm/arm/locore-v6.S
@@ -56,31 +56,10 @@
#if __ARM_ARCH >= 7
#define HANDLE_HYP \
- /* Leave HYP mode */ ;\
- mrs r0, cpsr ;\
- and r0, r0, #(PSR_MODE) /* Mode is in the low 5 bits of CPSR */ ;\
- teq r0, #(PSR_HYP32_MODE) /* Hyp Mode? */ ;\
- bne 1f ;\
/* Install Hypervisor Stub Exception Vector */ ;\
bl hypervisor_stub_vect_install ;\
- mov r0, 0 ;\
adr r1, hypmode_enabled ;\
- str r0, [r1] ;\
- /* Ensure that IRQ, FIQ and Aborts will be disabled after eret */ ;\
- mrs r0, cpsr ;\
- bic r0, r0, #(PSR_MODE) ;\
- orr r0, r0, #(PSR_SVC32_MODE) ;\
- orr r0, r0, #(PSR_I | PSR_F | PSR_A) ;\
- msr spsr_cxsf, r0 ;\
- /* Exit hypervisor mode */ ;\
- adr lr, 2f ;\
- MSR_ELR_HYP(14) ;\
- ERET ;\
-1: ;\
- mov r0, -1 ;\
- adr r1, hypmode_enabled ;\
- str r0, [r1] ;\
-2:
+ str r0, [r1]
#else
#define HANDLE_HYP
#endif /* __ARM_ARCH >= 7 */
Index: sys/arm/include/asm.h
===================================================================
--- sys/arm/include/asm.h
+++ sys/arm/include/asm.h
@@ -236,14 +236,6 @@
#define DMB dmb
#define WFI wfi
-#if defined(__ARM_ARCH_7VE__) || defined(__clang__)
-#define MSR_ELR_HYP(regnum) msr elr_hyp, lr
-#define ERET eret
-#else
-#define MSR_ELR_HYP(regnum) .word (0xe12ef300 | regnum)
-#define ERET .word 0xe160006e
-#endif
-
#elif __ARM_ARCH == 6
#define ISB mcr CP15_CP15ISB
#define DSB mcr CP15_CP15DSB

File Metadata

Mime Type
text/plain
Expires
Sun, Feb 22, 2:33 PM (13 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28938603
Default Alt Text
D10094.id26538.diff (2 KB)

Event Timeline