svn commit: r290167 - head/sys/arm/arm
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Thu Oct 29 22:12:05 UTC 2015
Author: gonzo
Date: Thu Oct 29 22:12:03 2015
New Revision: 290167
URL: https://svnweb.freebsd.org/changeset/base/290167
Log:
Fix LEAVE_HYP macro: spsr is not guaranteed to contain valid value at this
point, e.g. on RaspberryPi 2 when control is passed from loader to kernel
it contains garbage. So we use cpsr as a base for new cpsr value: if we
have reached this point it means current value is OK
Reviewed by: andrew
Modified:
head/sys/arm/arm/locore-v6.S
Modified: head/sys/arm/arm/locore-v6.S
==============================================================================
--- head/sys/arm/arm/locore-v6.S Thu Oct 29 21:40:32 2015 (r290166)
+++ head/sys/arm/arm/locore-v6.S Thu Oct 29 22:12:03 2015 (r290167)
@@ -74,9 +74,11 @@ __FBSDID("$FreeBSD$");
teq r0, #(PSR_HYP32_MODE) /* Hyp Mode? */ ;\
bne 1f ;\
/* Ensure that IRQ, FIQ and Aborts will be disabled after eret */ ;\
- mrs r0, spsr ;\
+ 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, r0 ;\
+ msr spsr_cxsf, r0 ;\
/* Exit hypervisor mode */ ;\
adr lr, 1f ;\
MSR_ELR_HYP(14) ;\
More information about the svn-src-all
mailing list