diff options
author | Anton Ivanov <anton.ivanov@cambridgegreys.com> | 2018-12-05 07:37:40 -0500 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2018-12-27 16:48:34 -0500 |
commit | 38e3cbd9b82c815006c505ad2995013a61af143e (patch) | |
tree | 0967a480864b5611fe931dd6ea090d272e241013 /arch/um | |
parent | a9c52c2a2881ec69343a49ee32b2f3965e74ca98 (diff) |
um: Skip TLB flushing where not needed
Skip TLB flushing for all cases where it is not needed, not
just flush_tlb_mm_range
Signed-off-by: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um')
-rw-r--r-- | arch/um/kernel/tlb.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/arch/um/kernel/tlb.c b/arch/um/kernel/tlb.c index b7f7a60a0928..9ca902df243a 100644 --- a/arch/um/kernel/tlb.c +++ b/arch/um/kernel/tlb.c | |||
@@ -520,6 +520,13 @@ pte_t *addr_pte(struct task_struct *task, unsigned long addr) | |||
520 | 520 | ||
521 | void flush_tlb_all(void) | 521 | void flush_tlb_all(void) |
522 | { | 522 | { |
523 | /* | ||
524 | * Don't bother flushing if this address space is about to be | ||
525 | * destroyed. | ||
526 | */ | ||
527 | if (atomic_read(¤t->mm->mm_users) == 0) | ||
528 | return; | ||
529 | |||
523 | flush_tlb_mm(current->mm); | 530 | flush_tlb_mm(current->mm); |
524 | } | 531 | } |
525 | 532 | ||
@@ -541,6 +548,13 @@ void __flush_tlb_one(unsigned long addr) | |||
541 | static void fix_range(struct mm_struct *mm, unsigned long start_addr, | 548 | static void fix_range(struct mm_struct *mm, unsigned long start_addr, |
542 | unsigned long end_addr, int force) | 549 | unsigned long end_addr, int force) |
543 | { | 550 | { |
551 | /* | ||
552 | * Don't bother flushing if this address space is about to be | ||
553 | * destroyed. | ||
554 | */ | ||
555 | if (atomic_read(&mm->mm_users) == 0) | ||
556 | return; | ||
557 | |||
544 | fix_range_common(mm, start_addr, end_addr, force); | 558 | fix_range_common(mm, start_addr, end_addr, force); |
545 | } | 559 | } |
546 | 560 | ||
@@ -556,13 +570,6 @@ EXPORT_SYMBOL(flush_tlb_range); | |||
556 | void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, | 570 | void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, |
557 | unsigned long end) | 571 | unsigned long end) |
558 | { | 572 | { |
559 | /* | ||
560 | * Don't bother flushing if this address space is about to be | ||
561 | * destroyed. | ||
562 | */ | ||
563 | if (atomic_read(&mm->mm_users) == 0) | ||
564 | return; | ||
565 | |||
566 | fix_range(mm, start, end, 0); | 573 | fix_range(mm, start, end, 0); |
567 | } | 574 | } |
568 | 575 | ||