Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / parisc / kernel / unaligned.c
index 62eea35..de0a1b2 100644 (file)
 #define ERR_NOTHANDLED -1
 #define ERR_PAGEFAULT  -2
 
-int unaligned_enabled = 1;
+int unaligned_enabled __read_mostly = 1;
 
 void die_if_kernel (char *str, struct pt_regs *regs, long err);
 
@@ -513,15 +513,18 @@ void handle_unaligned(struct pt_regs *regs)
        register int flop=0;    /* true if this is a flop */
 
        /* log a message with pacing */
-       if (user_mode(regs))
-       {
-               if (unaligned_count > 5 && jiffies - last_time > 5*HZ)
-               {
+       if (user_mode(regs)) {
+               if (current->thread.flags & PARISC_UAC_SIGBUS) {
+                       goto force_sigbus;
+               }
+
+               if (unaligned_count > 5 && jiffies - last_time > 5*HZ) {
                        unaligned_count = 0;
                        last_time = jiffies;
                }
-               if (++unaligned_count < 5)
-               {
+
+               if (!(current->thread.flags & PARISC_UAC_NOPRINT) 
+                   && ++unaligned_count < 5) {
                        char buf[256];
                        sprintf(buf, "%s(%d): unaligned access to 0x" RFMT " at ip=0x" RFMT "\n",
                                current->comm, current->pid, regs->ior, regs->iaoq[0]);
@@ -530,6 +533,7 @@ void handle_unaligned(struct pt_regs *regs)
                        show_regs(regs);
 #endif         
                }
+
                if (!unaligned_enabled)
                        goto force_sigbus;
        }