diff options
Diffstat (limited to 'drivers/rapidio/devices/rio_mport_cdev.c')
-rw-r--r-- | drivers/rapidio/devices/rio_mport_cdev.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/rapidio/devices/rio_mport_cdev.c b/drivers/rapidio/devices/rio_mport_cdev.c index 5beb0c361076..665d9e94a7e1 100644 --- a/drivers/rapidio/devices/rio_mport_cdev.c +++ b/drivers/rapidio/devices/rio_mport_cdev.c @@ -876,10 +876,10 @@ rio_dma_transfer(struct file *filp, u32 transfer_mode, * offset within the internal buffer specified by handle parameter. */ if (xfer->loc_addr) { - unsigned long offset; + unsigned int offset; long pinned; - offset = (unsigned long)(uintptr_t)xfer->loc_addr & ~PAGE_MASK; + offset = lower_32_bits(offset_in_page(xfer->loc_addr)); nr_pages = PAGE_ALIGN(xfer->length + offset) >> PAGE_SHIFT; page_list = kmalloc_array(nr_pages, @@ -889,11 +889,9 @@ rio_dma_transfer(struct file *filp, u32 transfer_mode, goto err_req; } - pinned = get_user_pages_unlocked( + pinned = get_user_pages_fast( (unsigned long)xfer->loc_addr & PAGE_MASK, - nr_pages, - page_list, - dir == DMA_FROM_DEVICE ? FOLL_WRITE : 0); + nr_pages, dir == DMA_FROM_DEVICE, page_list); if (pinned != nr_pages) { if (pinned < 0) { |