From c0f015aff6447a4ce90af6b9e27750e7c8516373 Mon Sep 17 00:00:00 2001
From: Yurii Zubrytskyi <zyy@google.com>
Date: Wed, 24 Aug 2016 14:58:07 -0700
Subject: [PATCH] [pipe] Fix the pipe driver for x64 platform + correct pages
count
- first_page and last_page are page start addresses, so the type
has to be long for x64
- as those variables are addresses, their difference doesn't
give the number of pages.
Signed-off-by: Yurii Zubrytskyi <zyy@google.com>
Change-Id: Ia00420c3261dea0ca4bba1f72125a1641c503000
---
drivers/platform/goldfish/goldfish_pipe.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c
index d0ec615ef95a..e945f190b424 100644
--- a/drivers/platform/goldfish/goldfish_pipe.c
+++ b/drivers/platform/goldfish/goldfish_pipe.c
@@ -308,7 +308,7 @@ static ssize_t goldfish_pipe_read_write(struct file *filp, char __user *buffer,
unsigned long page_end = (address & PAGE_MASK) + PAGE_SIZE;
unsigned long next, avail;
int status, wakeBit, page_i, num_contiguous_pages;
- int first_page, last_page, requested_pages;
+ long first_page, last_page, requested_pages;
unsigned long xaddr, xaddr_prev, xaddr_i;
/*
@@ -316,7 +316,7 @@ static ssize_t goldfish_pipe_read_write(struct file *filp, char __user *buffer,
*/
first_page = address & PAGE_MASK;
last_page = (address_end - 1) & PAGE_MASK;
- requested_pages = (last_page - first_page + 1);
+ requested_pages = ((last_page - first_page) >> PAGE_SHIFT) + 1;
if (requested_pages > MAX_PAGES_TO_GRAB) {
requested_pages = MAX_PAGES_TO_GRAB;
}
--
GitLab