The only sensible place for the !(mmusr & MMU_I) test is inside the
(mmusr & (MMU_I | MMU_WP)) branch. It is redundant when used in the
else branch.

Moreover, when used in the else branch it defeats the remaining
conditionals. Hence the (mmusr & (MMU_B|MMU_L|MMU_S)) branch is
unreachable, along with the final else branch.

Make the dead code live again.

I mentioned this dead code some time ago. It's still only a
theoretical bug, but maybe it's possible to evade a signal in the
(ssw & RM) case?

---

See also
http://lkml.kernel.org/r/alpine.LNX.2.00.1402211323140.7194@nippy.intranet

Does anyone have test cases for these exceptions?


diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c
index c1cc4e99aa94..506e5500fa44 100644
--- a/arch/m68k/kernel/traps.c
+++ b/arch/m68k/kernel/traps.c
@@ -561,9 +561,9 @@ static inline void bus_error030 (struct frame *fp)
                           handled. */
                        if (do_page_fault (&fp->ptregs, addr, errorcode) < 0)
                                return;
-               } else if (!(mmusr & MMU_I)) {
                        /* probably a 020 cas fault */
-                       if (!(ssw & RM) && send_fault_sig(&fp->ptregs) > 0)
+                       if (!(mmusr & MMU_I) && !(ssw & RM) &&
+                           send_fault_sig(&fp->ptregs) > 0)
                                pr_err("unexpected bus error (%#x,%#x)\n", ssw,
                                       mmusr);
                } else if (mmusr & (MMU_B|MMU_L|MMU_S)) {
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to