]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/sparc64/kernel/trampoline.S
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
[linux-2.6-omap-h63xx.git] / arch / sparc64 / kernel / trampoline.S
index 56ff552113410b2b2216aa519e4221e1aedb68d8..83abd5ae88a49c6458de439ee2bac8846bf5d336 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: trampoline.S,v 1.26 2002/02/09 19:49:30 davem Exp $
+/*
  * trampoline.S: Jump start slave processors on sparc64.
  *
  * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
@@ -328,6 +328,12 @@ after_lock_tlb:
 
        wrpr            %g0, 0, %wstate
 
+       sethi           %hi(prom_entry_lock), %g2
+1:     ldstub          [%g2 + %lo(prom_entry_lock)], %g1
+       membar          #StoreLoad | #StoreStore
+       brnz,pn         %g1, 1b
+        nop
+
        /* As a hack, put &init_thread_union into %g6.
         * prom_world() loads from here to restore the %asi
         * register.
@@ -337,7 +343,7 @@ after_lock_tlb:
 
        sethi           %hi(is_sun4v), %o0
        lduw            [%o0 + %lo(is_sun4v)], %o0
-       brz,pt          %o0, 1f
+       brz,pt          %o0, 2f
         nop
 
        TRAP_LOAD_TRAP_BLOCK(%g2, %g3)
@@ -369,10 +375,10 @@ after_lock_tlb:
        call            %o1
         add            %sp, (2047 + 128), %o0
 
-       ba,pt           %xcc, 2f
+       ba,pt           %xcc, 3f
         nop
 
-1:     sethi           %hi(sparc64_ttable_tl0), %o0
+2:     sethi           %hi(sparc64_ttable_tl0), %o0
        set             prom_set_trap_table_name, %g2
        stx             %g2, [%sp + 2047 + 128 + 0x00]
        mov             1, %g2
@@ -386,7 +392,11 @@ after_lock_tlb:
        call            %o1
         add            %sp, (2047 + 128), %o0
 
-2:     ldx             [%l0], %g6
+3:     sethi           %hi(prom_entry_lock), %g2
+       stb             %g0, [%g2 + %lo(prom_entry_lock)]
+       membar          #StoreStore | #StoreLoad
+
+       ldx             [%l0], %g6
        ldx             [%g6 + TI_TASK], %g4
 
        mov             1, %g5