lkml.org 
[lkml]   [2011]   [Dec]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 6/8] uio: Pass pointers to virt_to_page(), not integers
    From
    Date
    Most architectures define virt_to_page() as a macro that casts its
    argument such that an argument of type unsigned long will be accepted
    without complaint. However, the proper type is void *, and passing
    unsigned long results in a warning on MIPS.

    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    It might be clearer to assign:

    addr = (void *)((unsigned long)idev->info->mem[mi].addr + offset);

    since arithmetic on void pointers is weird. Either way should work though.

    Ben.

    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 a783d53..1ff7927 100644
    --- a/drivers/uio/uio.c
    +++ b/drivers/uio/uio.c
    @@ -620,6 +620,7 @@ static int uio_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
    struct uio_device *idev = vma->vm_private_data;
    struct page *page;
    unsigned long offset;
    + void *addr;

    int mi = uio_find_mem_index(vma);
    if (mi < 0)
    @@ -631,10 +632,11 @@ static int uio_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
    */
    offset = (vmf->pgoff - mi) << PAGE_SHIFT;

    + addr = (void *)(unsigned long)idev->info->mem[mi].addr + offset;
    if (idev->info->mem[mi].memtype == UIO_MEM_LOGICAL)
    - page = virt_to_page(idev->info->mem[mi].addr + offset);
    + page = virt_to_page(addr);
    else
    - page = vmalloc_to_page((void *)(unsigned long)idev->info->mem[mi].addr + offset);
    + page = vmalloc_to_page(addr);
    get_page(page);
    vmf->page = page;
    return 0;
    --
    1.7.7.3




    \
     
     \ /
      Last update: 2011-12-21 02:39    [W:0.023 / U:29.556 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site