diff options
author | Javier Martinez Canillas <martinez.javier@gmail.com> | 2011-01-03 20:24:22 +0100 |
---|---|---|
committer | Javier Martinez Canillas <martinez.javier@gmail.com> | 2011-01-08 00:49:01 +0100 |
commit | 6e04492ec6ff80036535d684018b5268c16e70c7 (patch) | |
tree | 3b8419d820ee24cc5ace7ea78de0915fec42912e | |
parent | 1f431a05e0d2843a8ff4d950c7b2120a83edb804 (diff) | |
download | ldd3-6e04492ec6ff80036535d684018b5268c16e70c7.tar.gz |
scullp: Change to new page fault API
-rw-r--r-- | scullp/mmap.c | 15 |
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; } |