[PATCH] powerpc/64s/radix: fix preempt imbalance in TLB flush
Aneesh Kumar K.V
aneesh.kumar at linux.vnet.ibm.com
Tue Oct 10 21:22:02 AEDT 2017
On 10/10/2017 03:46 PM, Nicholas Piggin wrote:
> Signed-off-by: Nicholas Piggin <npiggin at 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
More information about the Linuxppc-dev
mailing list