diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-23 22:19:14 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-23 22:19:14 -0400 |
commit | 5579a782ad7ffa162b1060993e4a298dd50e7a33 (patch) | |
tree | 17a039c29af04579bdbae8323fe322e7dd9b1ec1 /arch/sparc64 | |
parent | 969907a956752f88dde4aa23fa8c033b9a939aee (diff) | |
parent | 60b8267338aafde5315fc65ff385f3d4d75eccfe (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
math-emu: Fix thinko in _FP_DIV
math-emu: Fix signalling of underflow and inexact while packing result.
sparc: Add checkstack support
sparc: correct section of current_pc()
sparc: correct section of apc_no_idle
sparc64: Fix race in arch/sparc64/kernel/trampoline.S
Diffstat (limited to 'arch/sparc64')
-rw-r--r-- | arch/sparc64/kernel/trampoline.S | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/arch/sparc64/kernel/trampoline.S b/arch/sparc64/kernel/trampoline.S index 704a3afcfd06..83abd5ae88a4 100644 --- a/arch/sparc64/kernel/trampoline.S +++ b/arch/sparc64/kernel/trampoline.S | |||
@@ -328,6 +328,12 @@ after_lock_tlb: | |||
328 | 328 | ||
329 | wrpr %g0, 0, %wstate | 329 | wrpr %g0, 0, %wstate |
330 | 330 | ||
331 | sethi %hi(prom_entry_lock), %g2 | ||
332 | 1: ldstub [%g2 + %lo(prom_entry_lock)], %g1 | ||
333 | membar #StoreLoad | #StoreStore | ||
334 | brnz,pn %g1, 1b | ||
335 | nop | ||
336 | |||
331 | /* As a hack, put &init_thread_union into %g6. | 337 | /* As a hack, put &init_thread_union into %g6. |
332 | * prom_world() loads from here to restore the %asi | 338 | * prom_world() loads from here to restore the %asi |
333 | * register. | 339 | * register. |
@@ -337,7 +343,7 @@ after_lock_tlb: | |||
337 | 343 | ||
338 | sethi %hi(is_sun4v), %o0 | 344 | sethi %hi(is_sun4v), %o0 |
339 | lduw [%o0 + %lo(is_sun4v)], %o0 | 345 | lduw [%o0 + %lo(is_sun4v)], %o0 |
340 | brz,pt %o0, 1f | 346 | brz,pt %o0, 2f |
341 | nop | 347 | nop |
342 | 348 | ||
343 | TRAP_LOAD_TRAP_BLOCK(%g2, %g3) | 349 | TRAP_LOAD_TRAP_BLOCK(%g2, %g3) |
@@ -369,10 +375,10 @@ after_lock_tlb: | |||
369 | call %o1 | 375 | call %o1 |
370 | add %sp, (2047 + 128), %o0 | 376 | add %sp, (2047 + 128), %o0 |
371 | 377 | ||
372 | ba,pt %xcc, 2f | 378 | ba,pt %xcc, 3f |
373 | nop | 379 | nop |
374 | 380 | ||
375 | 1: sethi %hi(sparc64_ttable_tl0), %o0 | 381 | 2: sethi %hi(sparc64_ttable_tl0), %o0 |
376 | set prom_set_trap_table_name, %g2 | 382 | set prom_set_trap_table_name, %g2 |
377 | stx %g2, [%sp + 2047 + 128 + 0x00] | 383 | stx %g2, [%sp + 2047 + 128 + 0x00] |
378 | mov 1, %g2 | 384 | mov 1, %g2 |
@@ -386,7 +392,11 @@ after_lock_tlb: | |||
386 | call %o1 | 392 | call %o1 |
387 | add %sp, (2047 + 128), %o0 | 393 | add %sp, (2047 + 128), %o0 |
388 | 394 | ||
389 | 2: ldx [%l0], %g6 | 395 | 3: sethi %hi(prom_entry_lock), %g2 |
396 | stb %g0, [%g2 + %lo(prom_entry_lock)] | ||
397 | membar #StoreStore | #StoreLoad | ||
398 | |||
399 | ldx [%l0], %g6 | ||
390 | ldx [%g6 + TI_TASK], %g4 | 400 | ldx [%g6 + TI_TASK], %g4 |
391 | 401 | ||
392 | mov 1, %g5 | 402 | mov 1, %g5 |