diff options
Diffstat (limited to 'arch/sparc64/kernel/smp.c')
-rw-r--r-- | arch/sparc64/kernel/smp.c | 16 |
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 | ||