From dc0f6edaaa510fc88c219eb0953266d72af1a332 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 14 Jul 2015 11:11:51 +0100 Subject: [PATCH] vchiq_arm: Sort out the vmalloc case See: https://github.com/raspberrypi/linux/issues/1055 --- .../vc04_services/interface/vchiq_arm/vchiq_2835_arm.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c index 628508dadf2f6..c9febcc81816d 100644 --- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c @@ -395,21 +395,21 @@ create_pagelist(char __user *buf, size_t count, unsigned short type, if (is_vmalloc_addr(buf)) { int dir = (type == PAGELIST_WRITE) ? DMA_TO_DEVICE : DMA_FROM_DEVICE; - unsigned long length = pagelist->length; - unsigned int offset = pagelist->offset; + unsigned long length = count; + unsigned int off = offset; for (actual_pages = 0; actual_pages < num_pages; actual_pages++) { struct page *pg = vmalloc_to_page(buf + (actual_pages * PAGE_SIZE)); - size_t bytes = PAGE_SIZE - offset; + size_t bytes = PAGE_SIZE - off; if (bytes > length) bytes = length; pages[actual_pages] = pg; - dmac_map_area(page_address(pg) + offset, bytes, dir); + dmac_map_area(page_address(pg) + off, bytes, dir); length -= bytes; - offset = 0; + off = 0; } *need_release = 0; /* do not try and release vmalloc pages */ } else {