Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22cd25ed authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Linus Torvalds
Browse files

[PATCH] Add NOPFN_REFAULT result from vm_ops->nopfn()



Add a NOPFN_REFAULT return code for vm_ops->nopfn() equivalent to
NOPAGE_REFAULT for vmops->nopage() indicating that the handler requests a
re-execution of the faulting instruction

Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Arnd Bergmann <arnd.bergmann@de.ibm.com>
Cc: Hugh Dickins <hugh@veritas.com>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e0dc0d8f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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().
+4 −2
Original line number Diff line number Diff line
@@ -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);