aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/uio/uio.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
index c8e45add506e..e221f13fcb61 100644
--- a/drivers/uio/uio.c
+++ b/drivers/uio/uio.c
@@ -605,6 +605,7 @@ static int uio_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
605 struct uio_device *idev = vma->vm_private_data; 605 struct uio_device *idev = vma->vm_private_data;
606 struct page *page; 606 struct page *page;
607 unsigned long offset; 607 unsigned long offset;
608 void *addr;
608 609
609 int mi = uio_find_mem_index(vma); 610 int mi = uio_find_mem_index(vma);
610 if (mi < 0) 611 if (mi < 0)
@@ -616,10 +617,11 @@ static int uio_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
616 */ 617 */
617 offset = (vmf->pgoff - mi) << PAGE_SHIFT; 618 offset = (vmf->pgoff - mi) << PAGE_SHIFT;
618 619
620 addr = (void *)(unsigned long)idev->info->mem[mi].addr + offset;
619 if (idev->info->mem[mi].memtype == UIO_MEM_LOGICAL) 621 if (idev->info->mem[mi].memtype == UIO_MEM_LOGICAL)
620 page = virt_to_page(idev->info->mem[mi].addr + offset); 622 page = virt_to_page(addr);
621 else 623 else
622 page = vmalloc_to_page((void *)(unsigned long)idev->info->mem[mi].addr + offset); 624 page = vmalloc_to_page(addr);
623 get_page(page); 625 get_page(page);
624 vmf->page = page; 626 vmf->page = page;
625 return 0; 627 return 0;