aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/kernel/align.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c
index ee5b690a0bed..52e5758ea368 100644
--- a/arch/powerpc/kernel/align.c
+++ b/arch/powerpc/kernel/align.c
@@ -764,6 +764,16 @@ int fix_alignment(struct pt_regs *regs)
764 nb = aligninfo[instr].len; 764 nb = aligninfo[instr].len;
765 flags = aligninfo[instr].flags; 765 flags = aligninfo[instr].flags;
766 766
767 /* ldbrx/stdbrx overlap lfs/stfs in the DSISR unfortunately */
768 if (IS_XFORM(instruction) && ((instruction >> 1) & 0x3ff) == 532) {
769 nb = 8;
770 flags = LD+SW;
771 } else if (IS_XFORM(instruction) &&
772 ((instruction >> 1) & 0x3ff) == 660) {
773 nb = 8;
774 flags = ST+SW;
775 }
776
767 /* Byteswap little endian loads and stores */ 777 /* Byteswap little endian loads and stores */
768 swiz = 0; 778 swiz = 0;
769 if (regs->msr & MSR_LE) { 779 if (regs->msr & MSR_LE) {