openwrtv4/target/linux/brcm2708/patches-4.1/0120-vchiq_arm-Sort-out-the-vmalloc-case.patch

40 lines
1.4 KiB
Diff
Raw Normal View History

From fc0402a5515d72d27012c931cc405dc860b0e043 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/222] 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 {