MIPS: No branches in delay slots for huge pages in handle_tlbl
authorDavid Daney <david.daney@cavium.com>
Sat, 17 Sep 2011 01:06:02 +0000 (18:06 -0700)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 21 Sep 2011 15:54:07 +0000 (17:54 +0200)
For the case PM_DEFAULT_MASK == 0, we were placing a branch in the
delay slot of another branch.  This leads to undefined behavior.

Signed-off-by: David Daney <david.daney@cavium.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/2775/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/mm/tlbex.c

index 46f33c7c1a098b2ad54c9c68d7a997374ae32d71..e06370f58ef3b5eee07d527ef8d653179dc60c25 100644 (file)
@@ -1962,7 +1962,8 @@ static void __cpuinit build_r4000_tlb_load_handler(void)
                        uasm_i_andi(&p, wr.r3, wr.r3, 2);
                        uasm_il_beqz(&p, &r, wr.r3, label_tlbl_goaround2);
                }
-
+               if (PM_DEFAULT_MASK == 0)
+                       uasm_i_nop(&p);
                /*
                 * We clobbered C0_PAGEMASK, restore it.  On the other branch
                 * it is restored in build_huge_tlb_write_entry.