diff options
-rw-r--r-- | drivers/uio/uio.c | 6 |
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; |