[SPARC64]: Fix bugs in SMP TLB context version expiration handling.

1) We must flush the TLB, duh.

2) Even if the sw context was seen to be valid, the local cpu's
   hw context can be out of date, so reload it unconditionally.

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2006-02-27 17:56:51 -08:00 коммит произвёл David S. Miller
Родитель 6889331a12
Коммит aac0aadf09
1 изменённых файлов: 10 добавлений и 6 удалений

Просмотреть файл

@ -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);
}
}