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