sparc: tsb must be flushed before tlb
authorDave Kleikamp <dave.kleikamp@oracle.com>
Tue, 18 Jun 2013 14:05:36 +0000 (09:05 -0500)
committerBen Hutchings <ben@decadent.org.uk>
Fri, 2 Aug 2013 20:14:51 +0000 (22:14 +0200)
commit 23a01138efe216f8084cfaa74b0b90dd4b097441 upstream.

This fixes a race where a cpu may re-load a tlb from a stale tsb right
after it has been flushed by a remote function call.

I still see some instability when stressing the system with parallel
kernel builds while creating memory pressure by writing to
/proc/sys/vm/nr_hugepages, but this patch improves the stability
significantly.

Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
Acked-by: Bob Picco <bob.picco@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/sparc/mm/tlb.c

index afd021e..072f553 100644 (file)
@@ -115,8 +115,8 @@ no_cache_flush:
        }
 
        if (!tb->active) {
-               global_flush_tlb_page(mm, vaddr);
                flush_tsb_user_page(mm, vaddr);
+               global_flush_tlb_page(mm, vaddr);
                goto out;
        }