aboutsummaryrefslogtreecommitdiff
path: root/arch/sparc64/kernel/smp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc64/kernel/smp.c')
-rw-r--r--arch/sparc64/kernel/smp.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index 5ff2483e70b..eb7c0f855ba 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -909,14 +909,18 @@ void smp_receive_signal_client(int irq, struct pt_regs *regs)
*/
mm = current->active_mm;
if (likely(mm)) {
- if (unlikely(!CTX_VALID(mm->context))) {
- unsigned long flags;
+ unsigned long flags;
- spin_lock_irqsave(&mm->context.lock, flags);
+ spin_lock_irqsave(&mm->context.lock, flags);
+
+ if (unlikely(!CTX_VALID(mm->context)))
get_new_mmu_context(mm);
- load_secondary_context(mm);
- spin_unlock_irqrestore(&mm->context.lock, flags);
- }
+
+ load_secondary_context(mm);
+ __flush_tlb_mm(CTX_HWBITS(mm->context),
+ SECONDARY_CONTEXT);
+
+ spin_unlock_irqrestore(&mm->context.lock, flags);
}
}