aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/kernel/tlb.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/um/kernel/tlb.c')
-rw-r--r--arch/um/kernel/tlb.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/arch/um/kernel/tlb.c b/arch/um/kernel/tlb.c
index 429fed2f66b2..ef5a2a20d351 100644
--- a/arch/um/kernel/tlb.c
+++ b/arch/um/kernel/tlb.c
@@ -184,6 +184,9 @@ static inline int update_pte_range(pmd_t *pmd, unsigned long addr,
184 184
185 pte = pte_offset_kernel(pmd, addr); 185 pte = pte_offset_kernel(pmd, addr);
186 do { 186 do {
187 if ((addr >= STUB_START) && (addr < STUB_END))
188 continue;
189
187 r = pte_read(*pte); 190 r = pte_read(*pte);
188 w = pte_write(*pte); 191 w = pte_write(*pte);
189 x = pte_exec(*pte); 192 x = pte_exec(*pte);
@@ -486,9 +489,6 @@ void __flush_tlb_one(unsigned long addr)
486static void fix_range(struct mm_struct *mm, unsigned long start_addr, 489static void fix_range(struct mm_struct *mm, unsigned long start_addr,
487 unsigned long end_addr, int force) 490 unsigned long end_addr, int force)
488{ 491{
489 if (!proc_mm && (end_addr > STUB_START))
490 end_addr = STUB_START;
491
492 fix_range_common(mm, start_addr, end_addr, force); 492 fix_range_common(mm, start_addr, end_addr, force);
493} 493}
494 494
@@ -502,8 +502,6 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
502 502
503void flush_tlb_mm(struct mm_struct *mm) 503void flush_tlb_mm(struct mm_struct *mm)
504{ 504{
505 unsigned long end;
506
507 /* 505 /*
508 * Don't bother flushing if this address space is about to be 506 * Don't bother flushing if this address space is about to be
509 * destroyed. 507 * destroyed.
@@ -511,8 +509,7 @@ void flush_tlb_mm(struct mm_struct *mm)
511 if (atomic_read(&mm->mm_users) == 0) 509 if (atomic_read(&mm->mm_users) == 0)
512 return; 510 return;
513 511
514 end = proc_mm ? TASK_SIZE : STUB_START; 512 fix_range(mm, 0, TASK_SIZE, 0);
515 fix_range(mm, 0, end, 0);
516} 513}
517 514
518void force_flush_all(void) 515void force_flush_all(void)