From b5d50c7c1bff6e545bb45ef2ee59e99459e53475 Mon Sep 17 00:00:00 2001 From: Nick Piggin Date: Fri, 1 Aug 2008 03:15:21 +0200 Subject: [PATCH] --- yaml --- r: 112525 b: refs/heads/master c: 5843d9a4d0ba89719916c8f07fc9c57b7126be6d h: refs/heads/master i: 112523: ca5d5fec3a5c397eba7f51e937b6908646512797 v: v3 --- [refs] | 2 +- trunk/arch/x86/mm/pageattr.c | 3 +++ trunk/mm/highmem.c | 5 ++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 192410bcca47..d301b02862de 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 466ae837424dcc538b1af2a0eaf53be32edcdbe7 +refs/heads/master: 5843d9a4d0ba89719916c8f07fc9c57b7126be6d diff --git a/trunk/arch/x86/mm/pageattr.c b/trunk/arch/x86/mm/pageattr.c index 2c5c18c2464d..4adb33628dec 100644 --- a/trunk/arch/x86/mm/pageattr.c +++ b/trunk/arch/x86/mm/pageattr.c @@ -777,6 +777,9 @@ static int do_change_page_attr_set_clr(unsigned long addr, int numpages, WARN_ON_ONCE(1); } + /* Must avoid aliasing mappings in the highmem code */ + kmap_flush_unused(); + cpa.vaddr = addr; cpa.numpages = numpages; cpa.mask_set = mask_set; diff --git a/trunk/mm/highmem.c b/trunk/mm/highmem.c index e16e1523b688..b36b83b920ff 100644 --- a/trunk/mm/highmem.c +++ b/trunk/mm/highmem.c @@ -70,6 +70,7 @@ static DECLARE_WAIT_QUEUE_HEAD(pkmap_map_wait); static void flush_all_zero_pkmaps(void) { int i; + int need_flush = 0; flush_cache_kmaps(); @@ -101,8 +102,10 @@ static void flush_all_zero_pkmaps(void) &pkmap_page_table[i]); set_page_address(page, NULL); + need_flush = 1; } - flush_tlb_kernel_range(PKMAP_ADDR(0), PKMAP_ADDR(LAST_PKMAP)); + if (need_flush) + flush_tlb_kernel_range(PKMAP_ADDR(0), PKMAP_ADDR(LAST_PKMAP)); } /**