On 10/10/2017 03:46 PM, Nicholas Piggin wrote:
Signed-off-by: Nicholas Piggin <npig...@gmail.com>
---
  arch/powerpc/mm/tlb-radix.c | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/mm/tlb-radix.c b/arch/powerpc/mm/tlb-radix.c
index b3e849c4886e..de414460287a 100644
--- a/arch/powerpc/mm/tlb-radix.c
+++ b/arch/powerpc/mm/tlb-radix.c
@@ -358,7 +358,7 @@ void radix__flush_tlb_collapsed_pmd(struct mm_struct *mm, 
unsigned long addr)
        unsigned long ap = mmu_get_ap(mmu_virtual_psize);
        unsigned long pid, end;

-
+       preempt_disable();
        pid = mm ? mm->context.id : 0;
        if (unlikely(pid == MMU_NO_CONTEXT))
                goto no_context;
@@ -366,6 +366,7 @@ void radix__flush_tlb_collapsed_pmd(struct mm_struct *mm, 
unsigned long addr)
        /* 4k page size, just blow the world */
        if (PAGE_SIZE == 0x1000) {
                radix__flush_all_mm(mm);
+               preempt_enable();
                return;
        }


Can't we do a preempt_disable before the if (local) check?. That way we don't need that prempt_enable in that PAGE_SIZE==0x1000 path.We already do disable/enable correctly in radix__flush_all_mm(mm)

-aneesh

Reply via email to