|
@@ -206,6 +206,8 @@ void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, bool fullmm)
|
|
|
tlb->mm = mm;
|
|
|
|
|
|
tlb->fullmm = fullmm;
|
|
|
+ tlb->start = -1UL;
|
|
|
+ tlb->end = 0;
|
|
|
tlb->need_flush = 0;
|
|
|
tlb->fast_mode = (num_possible_cpus() == 1);
|
|
|
tlb->local.next = NULL;
|
|
@@ -248,6 +250,8 @@ void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long e
|
|
|
{
|
|
|
struct mmu_gather_batch *batch, *next;
|
|
|
|
|
|
+ tlb->start = start;
|
|
|
+ tlb->end = end;
|
|
|
tlb_flush_mmu(tlb);
|
|
|
|
|
|
/* keep the page table cache within bounds */
|
|
@@ -1204,6 +1208,11 @@ again:
|
|
|
*/
|
|
|
if (force_flush) {
|
|
|
force_flush = 0;
|
|
|
+
|
|
|
+#ifdef HAVE_GENERIC_MMU_GATHER
|
|
|
+ tlb->start = addr;
|
|
|
+ tlb->end = end;
|
|
|
+#endif
|
|
|
tlb_flush_mmu(tlb);
|
|
|
if (addr != end)
|
|
|
goto again;
|