aboutsummaryrefslogtreecommitdiffstats
path: root/arch/microblaze
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2014-10-29 06:03:09 -0400
committerWill Deacon <will.deacon@arm.com>2014-11-17 05:12:42 -0500
commitfb7332a9fedfd62b1ba6530c86f39f0fa38afd49 (patch)
tree5e77bd4944da750634c4438df64257cdeaa58888 /arch/microblaze
parent63648dd20fa0780ab6c1e923b5c276d257422cb3 (diff)
mmu_gather: move minimal range calculations into generic code
On architectures with hardware broadcasting of TLB invalidation messages , it makes sense to reduce the range of the mmu_gather structure when unmapping page ranges based on the dirty address information passed to tlb_remove_tlb_entry. arm64 already does this by directly manipulating the start/end fields of the gather structure, but this confuses the generic code which does not expect these fields to change and can end up calculating invalid, negative ranges when forcing a flush in zap_pte_range. This patch moves the minimal range calculation out of the arm64 code and into the generic implementation, simplifying zap_pte_range in the process (which no longer needs to care about start/end, since they will point to the appropriate ranges already). With the range being tracked by core code, the need_flush flag is dropped in favour of checking that the end of the range has actually been set. Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Russell King - ARM Linux <linux@arm.linux.org.uk> Cc: Michal Simek <monstr@monstr.eu> Acked-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/microblaze')
-rw-r--r--arch/microblaze/include/asm/tlb.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/microblaze/include/asm/tlb.h b/arch/microblaze/include/asm/tlb.h
index 8aa97817cc8c..99b6ded54849 100644
--- a/arch/microblaze/include/asm/tlb.h
+++ b/arch/microblaze/include/asm/tlb.h
@@ -14,7 +14,6 @@
14#define tlb_flush(tlb) flush_tlb_mm((tlb)->mm) 14#define tlb_flush(tlb) flush_tlb_mm((tlb)->mm)
15 15
16#include <linux/pagemap.h> 16#include <linux/pagemap.h>
17#include <asm-generic/tlb.h>
18 17
19#ifdef CONFIG_MMU 18#ifdef CONFIG_MMU
20#define tlb_start_vma(tlb, vma) do { } while (0) 19#define tlb_start_vma(tlb, vma) do { } while (0)
@@ -22,4 +21,6 @@
22#define __tlb_remove_tlb_entry(tlb, pte, address) do { } while (0) 21#define __tlb_remove_tlb_entry(tlb, pte, address) do { } while (0)
23#endif 22#endif
24 23
24#include <asm-generic/tlb.h>
25
25#endif /* _ASM_MICROBLAZE_TLB_H */ 26#endif /* _ASM_MICROBLAZE_TLB_H */