aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 5ff2483e70bf..eb7c0f855ba7 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)
909 */ 909 */
910 mm = current->active_mm; 910 mm = current->active_mm;
911 if (likely(mm)) { 911 if (likely(mm)) {
912 if (unlikely(!CTX_VALID(mm->context))) { 912 unsigned long flags;
913 unsigned long flags;
914 913
915 spin_lock_irqsave(&mm->context.lock, flags); 914 spin_lock_irqsave(&mm->context.lock, flags);
915
916 if (unlikely(!CTX_VALID(mm->context)))
916 get_new_mmu_context(mm); 917 get_new_mmu_context(mm);
917 load_secondary_context(mm); 918
918 spin_unlock_irqrestore(&mm->context.lock, flags); 919 load_secondary_context(mm);
919 } 920 __flush_tlb_mm(CTX_HWBITS(mm->context),
921 SECONDARY_CONTEXT);
922
923 spin_unlock_irqrestore(&mm->context.lock, flags);
920 } 924 }
921} 925}
922 926