Date: Thu, 29 Oct 2015 22:12:03 +0000 (UTC) From: Oleksandr Tymoshenko <gonzo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r290167 - head/sys/arm/arm Message-ID: <201510292212.t9TMC35I058229@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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) ;\
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510292212.t9TMC35I058229>