aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-4.1/0120-vchiq_arm-Sort-out-the-vmalloc-case.patch
blob: 9c0c7c11fe8330f75a4ec474ca5538a26ccec903 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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 {