diff options
author | Will Deacon <will.deacon@arm.com> | 2014-10-29 06:03:09 -0400 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2014-11-17 05:12:42 -0500 |
commit | fb7332a9fedfd62b1ba6530c86f39f0fa38afd49 (patch) | |
tree | 5e77bd4944da750634c4438df64257cdeaa58888 /arch/microblaze | |
parent | 63648dd20fa0780ab6c1e923b5c276d257422cb3 (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.h | 3 |
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 */ |