diff options
| -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 |
