diff --git a/[refs] b/[refs] index e47bcab40523..d9d660edc01b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e0dc0d8f4a327d033bfb63d43f113d5f31d11b3c +refs/heads/master: 22cd25ed31bbf849acaa06ab220dc4f526153f13 diff --git a/trunk/include/linux/mm.h b/trunk/include/linux/mm.h index 903f3b71f4a7..a0eec16eb0bd 100644 --- a/trunk/include/linux/mm.h +++ b/trunk/include/linux/mm.h @@ -637,6 +637,7 @@ static inline int page_mapped(struct page *page) */ #define NOPFN_SIGBUS ((unsigned long) -1) #define NOPFN_OOM ((unsigned long) -2) +#define NOPFN_REFAULT ((unsigned long) -3) /* * Different kinds of faults, as returned by handle_mm_fault(). diff --git a/trunk/mm/memory.c b/trunk/mm/memory.c index 8b8f0d2b453d..e7066e71dfa3 100644 --- a/trunk/mm/memory.c +++ b/trunk/mm/memory.c @@ -2355,10 +2355,12 @@ static noinline int do_no_pfn(struct mm_struct *mm, struct vm_area_struct *vma, BUG_ON(is_cow_mapping(vma->vm_flags)); pfn = vma->vm_ops->nopfn(vma, address & PAGE_MASK); - if (pfn == NOPFN_OOM) + if (unlikely(pfn == NOPFN_OOM)) return VM_FAULT_OOM; - if (pfn == NOPFN_SIGBUS) + else if (unlikely(pfn == NOPFN_SIGBUS)) return VM_FAULT_SIGBUS; + else if (unlikely(pfn == NOPFN_REFAULT)) + return VM_FAULT_MINOR; page_table = pte_offset_map_lock(mm, pmd, address, &ptl);