summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJavier Martinez Canillas <martinez.javier@gmail.com>2011-01-03 20:21:53 +0100
committerJavier Martinez Canillas <martinez.javier@gmail.com>2011-01-08 00:49:59 +0100
commitdac18ff0c3f815cc874168dd9cb0cc67b0909f21 (patch)
treea7f92ef9d4e36e24aea009cf28fbb2cbc1360d71
parent6e04492ec6ff80036535d684018b5268c16e70c7 (diff)
downloadldd3-dac18ff0c3f815cc874168dd9cb0cc67b0909f21.tar.gz
scullv: Change to new page fault API
-rw-r--r--scullv/mmap.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/scullv/mmap.c b/scullv/mmap.c
index a6cad95..4b6f48c 100644
--- a/scullv/mmap.c
+++ b/scullv/mmap.c
@@ -57,16 +57,16 @@ void scullv_vma_close(struct vm_area_struct *vma)
* is individually decreased, and would drop to 0.
*/
-struct page *scullv_vma_nopage(struct vm_area_struct *vma,
- unsigned long address, int *type)
+static int scullv_vma_nopage(struct vm_area_struct *vma, struct vm_fault *vmf)
{
unsigned long offset;
struct scullv_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 */
/*
@@ -91,11 +91,12 @@ struct page *scullv_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;
}