|
|
|
From 2b4d5c82da3850c7bf04c069b8eca966e931512f Mon Sep 17 00:00:00 2001
|
|
|
|
From: Phil Elwell <phil@raspberrypi.org>
|
|
|
|
Date: Tue, 14 Jul 2015 11:11:51 +0100
|
|
|
|
Subject: [PATCH 120/203] vchiq_arm: Sort out the vmalloc case
|
|
|
|
|
|
|
|
See: https://github.com/raspberrypi/linux/issues/1055
|
|
|
|
---
|
|
|
|
.../misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c | 10 +++++-----
|
|
|
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
|
|
|
|
+++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
|
|
|
|
@@ -394,21 +394,21 @@ create_pagelist(char __user *buf, size_t
|
|
|
|
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 {
|