Skip to content

Commit

Permalink
powerpc/64s/radix: mm->context.id should always be valid
Browse files Browse the repository at this point in the history
The MMU_NO_CONTEXT checks are an unnecessary complication. Make
these warn to prepare to remove them in future.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20230203111718.1149852-3-npiggin@gmail.com
  • Loading branch information
Nicholas Piggin authored and Michael Ellerman committed Feb 8, 2023
1 parent 45abf5d commit d01dc25
Showing 1 changed file with 21 additions and 18 deletions.
39 changes: 21 additions & 18 deletions arch/powerpc/mm/book3s64/radix_tlb.c
Original file line number Diff line number Diff line change
Expand Up @@ -700,25 +700,27 @@ static inline void _tlbiel_va_range_multicast(struct mm_struct *mm,
*/
void radix__local_flush_tlb_mm(struct mm_struct *mm)
{
unsigned long pid;
unsigned long pid = mm->context.id;

if (WARN_ON_ONCE(pid == MMU_NO_CONTEXT))
return;

preempt_disable();
pid = mm->context.id;
if (pid != MMU_NO_CONTEXT)
_tlbiel_pid(pid, RIC_FLUSH_TLB);
_tlbiel_pid(pid, RIC_FLUSH_TLB);
preempt_enable();
}
EXPORT_SYMBOL(radix__local_flush_tlb_mm);

#ifndef CONFIG_SMP
void radix__local_flush_all_mm(struct mm_struct *mm)
{
unsigned long pid;
unsigned long pid = mm->context.id;

if (WARN_ON_ONCE(pid == MMU_NO_CONTEXT))
return;

preempt_disable();
pid = mm->context.id;
if (pid != MMU_NO_CONTEXT)
_tlbiel_pid(pid, RIC_FLUSH_ALL);
_tlbiel_pid(pid, RIC_FLUSH_ALL);
preempt_enable();
}
EXPORT_SYMBOL(radix__local_flush_all_mm);
Expand All @@ -732,12 +734,13 @@ static void __flush_all_mm(struct mm_struct *mm, bool fullmm)
void radix__local_flush_tlb_page_psize(struct mm_struct *mm, unsigned long vmaddr,
int psize)
{
unsigned long pid;
unsigned long pid = mm->context.id;

if (WARN_ON_ONCE(pid == MMU_NO_CONTEXT))
return;

preempt_disable();
pid = mm->context.id;
if (pid != MMU_NO_CONTEXT)
_tlbiel_va(vmaddr, pid, psize, RIC_FLUSH_TLB);
_tlbiel_va(vmaddr, pid, psize, RIC_FLUSH_TLB);
preempt_enable();
}

Expand Down Expand Up @@ -945,7 +948,7 @@ void radix__flush_tlb_mm(struct mm_struct *mm)
enum tlb_flush_type type;

pid = mm->context.id;
if (unlikely(pid == MMU_NO_CONTEXT))
if (WARN_ON_ONCE(pid == MMU_NO_CONTEXT))
return;

preempt_disable();
Expand Down Expand Up @@ -985,7 +988,7 @@ static void __flush_all_mm(struct mm_struct *mm, bool fullmm)
enum tlb_flush_type type;

pid = mm->context.id;
if (unlikely(pid == MMU_NO_CONTEXT))
if (WARN_ON_ONCE(pid == MMU_NO_CONTEXT))
return;

preempt_disable();
Expand Down Expand Up @@ -1024,7 +1027,7 @@ void radix__flush_tlb_page_psize(struct mm_struct *mm, unsigned long vmaddr,
enum tlb_flush_type type;

pid = mm->context.id;
if (unlikely(pid == MMU_NO_CONTEXT))
if (WARN_ON_ONCE(pid == MMU_NO_CONTEXT))
return;

preempt_disable();
Expand Down Expand Up @@ -1130,7 +1133,7 @@ static inline void __radix__flush_tlb_range(struct mm_struct *mm,
enum tlb_flush_type type;

pid = mm->context.id;
if (unlikely(pid == MMU_NO_CONTEXT))
if (WARN_ON_ONCE(pid == MMU_NO_CONTEXT))
return;

preempt_disable();
Expand Down Expand Up @@ -1330,7 +1333,7 @@ static void __radix__flush_tlb_range_psize(struct mm_struct *mm,
enum tlb_flush_type type;

pid = mm->context.id;
if (unlikely(pid == MMU_NO_CONTEXT))
if (WARN_ON_ONCE(pid == MMU_NO_CONTEXT))
return;

fullmm = (end == TLB_FLUSH_ALL);
Expand Down Expand Up @@ -1406,7 +1409,7 @@ void radix__flush_tlb_collapsed_pmd(struct mm_struct *mm, unsigned long addr)
enum tlb_flush_type type;

pid = mm->context.id;
if (unlikely(pid == MMU_NO_CONTEXT))
if (WARN_ON_ONCE(pid == MMU_NO_CONTEXT))
return;

/* 4k page size, just blow the world */
Expand Down

0 comments on commit d01dc25

Please sign in to comment.