summaryrefslogtreecommitdiffstats
path: root/arch/arc/kernel/unaligned.c
diff options
context:
space:
mode:
authorLinus Torvalds2017-01-28 20:00:08 +0100
committerLinus Torvalds2017-01-28 20:00:08 +0100
commitef1dce990b06a3f5bf4f71100891686b5d3f7c7e (patch)
tree22d25cfec318d544a10f1a64738e40e2792ff836 /arch/arc/kernel/unaligned.c
parentMerge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net (diff)
parentARC: [arcompact] handle unaligned access delay slot corner case (diff)
downloadkernel-qcow2-linux-ef1dce990b06a3f5bf4f71100891686b5d3f7c7e.tar.gz
kernel-qcow2-linux-ef1dce990b06a3f5bf4f71100891686b5d3f7c7e.tar.xz
kernel-qcow2-linux-ef1dce990b06a3f5bf4f71100891686b5d3f7c7e.zip
Merge tag 'arc-4.10-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc
Pull ARC fixes from Vineet Gupta: "Hopefully last set of changes for ARC for 4.10: - fix for unaligned access emulation corner case - fix for udelay loop inline asm regression - fix irq affinity finally for AXS103 board [Yuriy] - final fixes for setting IO-coherency sanely in SMP" * tag 'arc-4.10-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc: ARC: [arcompact] handle unaligned access delay slot corner case ARCv2: smp-boot: wake_flag polling by non-Masters needs to be uncached ARC: smp-boot: Decouple Non masters waiting API from jump to entry point ARCv2: MCIP: update the BCR per current changes ARC: udelay: fix inline assembler by adding LP_COUNT to clobber list ARCv2: MCIP: Deprecate setting of affinity in Device Tree
Diffstat (limited to 'arch/arc/kernel/unaligned.c')
-rw-r--r--arch/arc/kernel/unaligned.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/arc/kernel/unaligned.c b/arch/arc/kernel/unaligned.c
index abd961f3e763..91ebe382147f 100644
--- a/arch/arc/kernel/unaligned.c
+++ b/arch/arc/kernel/unaligned.c
@@ -241,8 +241,9 @@ int misaligned_fixup(unsigned long address, struct pt_regs *regs,
if (state.fault)
goto fault;
+ /* clear any remanants of delay slot */
if (delay_mode(regs)) {
- regs->ret = regs->bta;
+ regs->ret = regs->bta ~1U;
regs->status32 &= ~STATUS_DE_MASK;
} else {
regs->ret += state.instr_len;