summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJavier Martinez Canillas <martinez.javier@gmail.com>2011-01-03 20:24:22 +0100
committerJavier Martinez Canillas <martinez.javier@gmail.com>2011-01-08 00:49:01 +0100
commit6e04492ec6ff80036535d684018b5268c16e70c7 (patch)
tree3b8419d820ee24cc5ace7ea78de0915fec42912e
parent1f431a05e0d2843a8ff4d950c7b2120a83edb804 (diff)
downloadldd3-6e04492ec6ff80036535d684018b5268c16e70c7.tar.gz
scullp: Change to new page fault API
-rw-r--r--scullp/mmap.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/scullp/mmap.c b/scullp/mmap.c
index c84f0e8..0616dcb 100644
--- a/scullp/mmap.c
+++ b/scullp/mmap.c
@@ -57,16 +57,16 @@ void scullp_vma_close(struct vm_area_struct *vma)
* is individually decreased, and would drop to 0.
*/
-struct page *scullp_vma_nopage(struct vm_area_struct *vma,
- unsigned long address, int *type)
+static int scullp_vma_nopage(struct vm_area_struct *vma, struct vm_fault *vmf)
{
unsigned long offset;
struct scullp_dev *ptr, *dev = vma->vm_private_data;
- struct page *page = VM_FAULT_SIGBUS;
+ struct page *page = NULL;
void *pageptr = NULL; /* default to "missing" */
+ int retval = VM_FAULT_NOPAGE;
down(&dev->sem);
- offset = (address - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT);
+ offset = (unsigned long)(vmf->virtual_address - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT);
if (offset >= dev->size) goto out; /* out of range */
/*
@@ -85,11 +85,12 @@ struct page *scullp_vma_nopage(struct vm_area_struct *vma,
/* got it, now increment the count */
get_page(page);
- if (type)
- *type = VM_FAULT_MINOR;
+ vmf->page = page;
+ retval = 0;
+
out:
up(&dev->sem);
- return page;
+ return retval;
}