/* Handle bad interrupts */
  static struct irq_desc bad_irq_desc = {
        .handle_irq = handle_bad_irq,
-       .lock = SPIN_LOCK_UNLOCKED
+       .lock = __SPIN_LOCK_UNLOCKED(bad_irq_desc.lock),
  };
  
 +#ifdef CONFIG_CPUMASK_OFFSTACK
 +/* We are not allocating bad_irq_desc.affinity or .pending_mask */
 +#error "ARM architecture does not support CONFIG_CPUMASK_OFFSTACK."
 +#endif
 +
  /*
   * do_IRQ handles all hardware IRQ's.  Decoded IRQs should not
   * come via this function.  Instead, they should provide their
 
        /* get the address */
        address = read_cr2();
  
-       if (unlikely(notify_page_fault(regs)))
-               return;
 -      si_code = SEGV_MAPERR;
 -
        if (unlikely(kmmio_fault(regs, address)))
                return;
  
                        return;
  
                /* Can handle a stale RO->RW TLB */
 -              if (spurious_fault(address, error_code))
 +              if (spurious_fault(error_code, address))
                        return;
  
+               /* kprobes don't want to hook the spurious faults. */
+               if (notify_page_fault(regs))
+                       return;
                /*
                 * Don't take the mm semaphore here. If we fixup a prefetch
                 * fault we could otherwise deadlock.
                 */
 -              goto bad_area_nosemaphore;
 +              bad_area_nosemaphore(regs, error_code, address);
 +              return;
        }
  
 -      /* kprobes don't want to hook the spurious faults. */
 -      if (notify_page_fault(regs))
++      if (unlikely(notify_page_fault(regs)))
+               return;
 -
        /*
         * It's safe to allow irq's after cr2 has been saved and the
         * vmalloc fault has been handled.