Commit 3c18ddd1 authored by Nick Piggin's avatar Nick Piggin Committed by Linus Torvalds

mm: remove nopage

Nothing in the tree uses nopage any more.  Remove support for it in the
core mm code and documentation (and a few stray references to it in
comments).
Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4d3d5b41
...@@ -128,15 +128,6 @@ Who: Arjan van de Ven <arjan@linux.intel.com> ...@@ -128,15 +128,6 @@ Who: Arjan van de Ven <arjan@linux.intel.com>
--------------------------- ---------------------------
What: vm_ops.nopage
When: Soon, provided in-kernel callers have been converted
Why: This interface is replaced by vm_ops.fault, but it has been around
forever, is used by a lot of drivers, and doesn't cost much to
maintain.
Who: Nick Piggin <npiggin@suse.de>
---------------------------
What: PHYSDEVPATH, PHYSDEVBUS, PHYSDEVDRIVER in the uevent environment What: PHYSDEVPATH, PHYSDEVBUS, PHYSDEVDRIVER in the uevent environment
When: October 2008 When: October 2008
Why: The stacking of class devices makes these values misleading and Why: The stacking of class devices makes these values misleading and
......
...@@ -511,7 +511,6 @@ prototypes: ...@@ -511,7 +511,6 @@ prototypes:
void (*open)(struct vm_area_struct*); void (*open)(struct vm_area_struct*);
void (*close)(struct vm_area_struct*); void (*close)(struct vm_area_struct*);
int (*fault)(struct vm_area_struct*, struct vm_fault *); int (*fault)(struct vm_area_struct*, struct vm_fault *);
struct page *(*nopage)(struct vm_area_struct*, unsigned long, int *);
int (*page_mkwrite)(struct vm_area_struct *, struct page *); int (*page_mkwrite)(struct vm_area_struct *, struct page *);
locking rules: locking rules:
...@@ -519,7 +518,6 @@ locking rules: ...@@ -519,7 +518,6 @@ locking rules:
open: no yes open: no yes
close: no yes close: no yes
fault: no yes fault: no yes
nopage: no yes
page_mkwrite: no yes no page_mkwrite: no yes no
->page_mkwrite() is called when a previously read-only page is ->page_mkwrite() is called when a previously read-only page is
...@@ -537,4 +535,3 @@ NULL. ...@@ -537,4 +535,3 @@ NULL.
ipc/shm.c::shm_delete() - may need BKL. ipc/shm.c::shm_delete() - may need BKL.
->read() and ->write() in many drivers are (probably) missing BKL. ->read() and ->write() in many drivers are (probably) missing BKL.
drivers/sgi/char/graphics.c::sgi_graphics_nopage() - may need BKL.
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
/* /*
* TODO: * TODO:
* - remove "mark pages reserved-hacks" from memory allocation code * - remove "mark pages reserved-hacks" from memory allocation code
* and implement nopage() * and implement fault()
* - check decimation, calculating and reporting image size when * - check decimation, calculating and reporting image size when
* using decimation * using decimation
* - implement read(), user mode buffers and overlay (?) * - implement read(), user mode buffers and overlay (?)
......
...@@ -112,8 +112,9 @@ static int vmlfb_alloc_vram_area(struct vram_area *va, unsigned max_order, ...@@ -112,8 +112,9 @@ static int vmlfb_alloc_vram_area(struct vram_area *va, unsigned max_order,
/* /*
* It seems like __get_free_pages only ups the usage count * It seems like __get_free_pages only ups the usage count
* of the first page. This doesn't work with nopage mapping, so * of the first page. This doesn't work with fault mapping, so
* up the usage count once more. * up the usage count once more (XXX: should use split_page or
* compound page).
*/ */
memset((void *)va->logical, 0x00, va->size); memset((void *)va->logical, 0x00, va->size);
......
...@@ -438,7 +438,7 @@ static int stuffed_readpage(struct gfs2_inode *ip, struct page *page) ...@@ -438,7 +438,7 @@ static int stuffed_readpage(struct gfs2_inode *ip, struct page *page)
int error; int error;
/* /*
* Due to the order of unstuffing files and ->nopage(), we can be * Due to the order of unstuffing files and ->fault(), we can be
* asked for a zero page in the case of a stuffed file being extended, * asked for a zero page in the case of a stuffed file being extended,
* so we need to supply one here. It doesn't happen often. * so we need to supply one here. It doesn't happen often.
*/ */
......
...@@ -164,8 +164,6 @@ struct vm_operations_struct { ...@@ -164,8 +164,6 @@ struct vm_operations_struct {
void (*open)(struct vm_area_struct * area); void (*open)(struct vm_area_struct * area);
void (*close)(struct vm_area_struct * area); void (*close)(struct vm_area_struct * area);
int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf); int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);
struct page *(*nopage)(struct vm_area_struct *area,
unsigned long address, int *type);
unsigned long (*nopfn)(struct vm_area_struct *area, unsigned long (*nopfn)(struct vm_area_struct *area,
unsigned long address); unsigned long address);
...@@ -648,12 +646,6 @@ static inline int page_mapped(struct page *page) ...@@ -648,12 +646,6 @@ static inline int page_mapped(struct page *page)
return atomic_read(&(page)->_mapcount) >= 0; return atomic_read(&(page)->_mapcount) >= 0;
} }
/*
* Error return values for the *_nopage functions
*/
#define NOPAGE_SIGBUS (NULL)
#define NOPAGE_OOM ((struct page *) (-1))
/* /*
* Error return values for the *_nopfn functions * Error return values for the *_nopfn functions
*/ */
......
...@@ -1057,8 +1057,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, ...@@ -1057,8 +1057,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
if (pages) if (pages)
foll_flags |= FOLL_GET; foll_flags |= FOLL_GET;
if (!write && !(vma->vm_flags & VM_LOCKED) && if (!write && !(vma->vm_flags & VM_LOCKED) &&
(!vma->vm_ops || (!vma->vm_ops->nopage && (!vma->vm_ops || !vma->vm_ops->fault))
!vma->vm_ops->fault)))
foll_flags |= FOLL_ANON; foll_flags |= FOLL_ANON;
do { do {
...@@ -2199,20 +2198,9 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma, ...@@ -2199,20 +2198,9 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
BUG_ON(vma->vm_flags & VM_PFNMAP); BUG_ON(vma->vm_flags & VM_PFNMAP);
if (likely(vma->vm_ops->fault)) { ret = vma->vm_ops->fault(vma, &vmf);
ret = vma->vm_ops->fault(vma, &vmf); if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE)))
if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))) return ret;
return ret;
} else {
/* Legacy ->nopage path */
ret = 0;
vmf.page = vma->vm_ops->nopage(vma, address & PAGE_MASK, &ret);
/* no page was available -- either SIGBUS or OOM */
if (unlikely(vmf.page == NOPAGE_SIGBUS))
return VM_FAULT_SIGBUS;
else if (unlikely(vmf.page == NOPAGE_OOM))
return VM_FAULT_OOM;
}
/* /*
* For consistency in subsequent calls, make the faulted page always * For consistency in subsequent calls, make the faulted page always
...@@ -2458,7 +2446,7 @@ static inline int handle_pte_fault(struct mm_struct *mm, ...@@ -2458,7 +2446,7 @@ static inline int handle_pte_fault(struct mm_struct *mm,
if (!pte_present(entry)) { if (!pte_present(entry)) {
if (pte_none(entry)) { if (pte_none(entry)) {
if (vma->vm_ops) { if (vma->vm_ops) {
if (vma->vm_ops->fault || vma->vm_ops->nopage) if (likely(vma->vm_ops->fault))
return do_linear_fault(mm, vma, address, return do_linear_fault(mm, vma, address,
pte, pmd, write_access, entry); pte, pmd, write_access, entry);
if (unlikely(vma->vm_ops->nopfn)) if (unlikely(vma->vm_ops->nopfn))
......
...@@ -33,7 +33,7 @@ static unsigned char mincore_page(struct address_space *mapping, pgoff_t pgoff) ...@@ -33,7 +33,7 @@ static unsigned char mincore_page(struct address_space *mapping, pgoff_t pgoff)
* When tmpfs swaps out a page from a file, any process mapping that * When tmpfs swaps out a page from a file, any process mapping that
* file will not get a swp_entry_t in its pte, but rather it is like * file will not get a swp_entry_t in its pte, but rather it is like
* any other file mapping (ie. marked !present and faulted in with * any other file mapping (ie. marked !present and faulted in with
* tmpfs's .nopage). So swapped out tmpfs mappings are tested here. * tmpfs's .fault). So swapped out tmpfs mappings are tested here.
* *
* However when tmpfs moves the page from pagecache and into swapcache, * However when tmpfs moves the page from pagecache and into swapcache,
* it is still in core, but the find_get_page below won't find it. * it is still in core, but the find_get_page below won't find it.
......
...@@ -662,7 +662,6 @@ void page_remove_rmap(struct page *page, struct vm_area_struct *vma) ...@@ -662,7 +662,6 @@ void page_remove_rmap(struct page *page, struct vm_area_struct *vma)
printk (KERN_EMERG " page->mapping = %p\n", page->mapping); printk (KERN_EMERG " page->mapping = %p\n", page->mapping);
print_symbol (KERN_EMERG " vma->vm_ops = %s\n", (unsigned long)vma->vm_ops); print_symbol (KERN_EMERG " vma->vm_ops = %s\n", (unsigned long)vma->vm_ops);
if (vma->vm_ops) { if (vma->vm_ops) {
print_symbol (KERN_EMERG " vma->vm_ops->nopage = %s\n", (unsigned long)vma->vm_ops->nopage);
print_symbol (KERN_EMERG " vma->vm_ops->fault = %s\n", (unsigned long)vma->vm_ops->fault); print_symbol (KERN_EMERG " vma->vm_ops->fault = %s\n", (unsigned long)vma->vm_ops->fault);
} }
if (vma->vm_file && vma->vm_file->f_op) if (vma->vm_file && vma->vm_file->f_op)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment