ARM: 7880/1: Clear the IT state independent of the Thumb-2 mode
The ARM architecture reference specifies that the IT state bits in the PSR must be all zeros in ARM mode or behavior is unspecified. On the Qualcomm Snapdragon S4/Krait architecture CPUs the processor continues to consider the IT state bits while in ARM mode. This makes it so that some instructions are skipped by the CPU. Signed-off-by: T.J. Purtell <tj@mobisocial.us> [rmk+kernel@arm.linux.org.uk: fixed whitespace formatting in patch] Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
e16b31bf47
commit
6ecf830e50
|
@ -375,12 +375,18 @@ setup_return(struct pt_regs *regs, struct ksignal *ksig,
|
|||
*/
|
||||
thumb = handler & 1;
|
||||
|
||||
#if __LINUX_ARM_ARCH__ >= 7
|
||||
/*
|
||||
* Clear the If-Then Thumb-2 execution state
|
||||
* ARM spec requires this to be all 000s in ARM mode
|
||||
* Snapdragon S4/Krait misbehaves on a Thumb=>ARM
|
||||
* signal transition without this.
|
||||
*/
|
||||
cpsr &= ~PSR_IT_MASK;
|
||||
#endif
|
||||
|
||||
if (thumb) {
|
||||
cpsr |= PSR_T_BIT;
|
||||
#if __LINUX_ARM_ARCH__ >= 7
|
||||
/* clear the If-Then Thumb-2 execution state */
|
||||
cpsr &= ~PSR_IT_MASK;
|
||||
#endif
|
||||
} else
|
||||
cpsr &= ~PSR_T_BIT;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue