diff mbox

[V2] arm: mm: fix dcache flush logic for compound high pages

Message ID 1387206223-1670-1-git-send-email-steve.capper@linaro.org
State Accepted
Commit 2a7cfcbc0553365d75716f69ee7b704cac7c9248
Headers show

Commit Message

Steve Capper Dec. 16, 2013, 3:03 p.m. UTC
When given a compound high page, __flush_dcache_page will only flush
the first page of the compound page repeatedly rather than the entire
set of constituent pages.

This patch corrects the logic such that all constituent pages are now
flushed.

Signed-off-by: Steve Capper <steve.capper@linaro.org>
---
V2: style change use page + i rather than separate struct *cpage
---
 arch/arm/mm/flush.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Will Deacon Dec. 16, 2013, 3:54 p.m. UTC | #1
On Mon, Dec 16, 2013 at 03:03:43PM +0000, Steve Capper wrote:
> When given a compound high page, __flush_dcache_page will only flush
> the first page of the compound page repeatedly rather than the entire
> set of constituent pages.
> 
> This patch corrects the logic such that all constituent pages are now
> flushed.

Since this probably wants to go to -stable, it's worth mentioning the commit
which introduced it in the commit text.

> Signed-off-by: Steve Capper <steve.capper@linaro.org>
> ---
> V2: style change use page + i rather than separate struct *cpage
> ---

  Acked-by: Will Deacon <will.deacon@arm.com>

Cheers Steve.

Will
Steve Capper Dec. 16, 2013, 4:28 p.m. UTC | #2
On Mon, Dec 16, 2013 at 03:54:04PM +0000, Will Deacon wrote:
> On Mon, Dec 16, 2013 at 03:03:43PM +0000, Steve Capper wrote:
> > When given a compound high page, __flush_dcache_page will only flush
> > the first page of the compound page repeatedly rather than the entire
> > set of constituent pages.
> > 
> > This patch corrects the logic such that all constituent pages are now
> > flushed.
> 
> Since this probably wants to go to -stable, it's worth mentioning the commit
> which introduced it in the commit text.
> 
> > Signed-off-by: Steve Capper <steve.capper@linaro.org>
> > ---
> > V2: style change use page + i rather than separate struct *cpage
> > ---
> 
>   Acked-by: Will Deacon <will.deacon@arm.com>
> 
> Cheers Steve.
> 
> Will

Ta Will,
That's in Russell's system as: 7923/1
diff mbox

Patch

diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
index 6d5ba9a..3387e60 100644
--- a/arch/arm/mm/flush.c
+++ b/arch/arm/mm/flush.c
@@ -175,16 +175,16 @@  void __flush_dcache_page(struct address_space *mapping, struct page *page)
 		unsigned long i;
 		if (cache_is_vipt_nonaliasing()) {
 			for (i = 0; i < (1 << compound_order(page)); i++) {
-				void *addr = kmap_atomic(page);
+				void *addr = kmap_atomic(page + i);
 				__cpuc_flush_dcache_area(addr, PAGE_SIZE);
 				kunmap_atomic(addr);
 			}
 		} else {
 			for (i = 0; i < (1 << compound_order(page)); i++) {
-				void *addr = kmap_high_get(page);
+				void *addr = kmap_high_get(page + i);
 				if (addr) {
 					__cpuc_flush_dcache_area(addr, PAGE_SIZE);
-					kunmap_high(page);
+					kunmap_high(page + i);
 				}
 			}
 		}