}
  
        mmap_read_unlock(mm);
 -      if (unlikely(fault & VM_FAULT_ERROR)) {
 -              mm_fault_error(regs, hw_error_code, address, fault);
 +      if (likely(!(fault & VM_FAULT_ERROR)))
 +              return;
 +
 +      if (fatal_signal_pending(current) && !user_mode(regs)) {
 +              kernelmode_fixup_or_oops(regs, error_code, address, 0, 0);
                return;
        }
- 
-       check_v8086_mode(regs, address, tsk);
 +
 +      if (fault & VM_FAULT_OOM) {
 +              /* Kernel mode? Handle exceptions or die: */
 +              if (!user_mode(regs)) {
 +                      kernelmode_fixup_or_oops(regs, error_code, address,
 +                                               SIGSEGV, SEGV_MAPERR);
 +                      return;
 +              }
 +
 +              /*
 +               * We ran out of memory, call the OOM killer, and return the
 +               * userspace (which will retry the fault, or kill us if we got
 +               * oom-killed):
 +               */
 +              pagefault_out_of_memory();
 +      } else {
 +              if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON|
 +                           VM_FAULT_HWPOISON_LARGE))
 +                      do_sigbus(regs, error_code, address, fault);
 +              else if (fault & VM_FAULT_SIGSEGV)
 +                      bad_area_nosemaphore(regs, error_code, address);
 +              else
 +                      BUG();
 +      }
  }
  NOKPROBE_SYMBOL(do_user_addr_fault);