diff options
Diffstat (limited to 'arch/sparc64/kernel/entry.S')
-rw-r--r-- | arch/sparc64/kernel/entry.S | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index 6d0b3ed77a02..be85ce2a4ad9 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <asm/estate.h> | 22 | #include <asm/estate.h> |
23 | #include <asm/auxio.h> | 23 | #include <asm/auxio.h> |
24 | #include <asm/sfafsr.h> | 24 | #include <asm/sfafsr.h> |
25 | #include <asm/pil.h> | ||
25 | 26 | ||
26 | #define curptr g6 | 27 | #define curptr g6 |
27 | 28 | ||
@@ -431,20 +432,16 @@ do_ivec: | |||
431 | membar #Sync | 432 | membar #Sync |
432 | 433 | ||
433 | sethi %hi(ivector_table), %g2 | 434 | sethi %hi(ivector_table), %g2 |
434 | sllx %g3, 5, %g3 | 435 | sllx %g3, 3, %g3 |
435 | or %g2, %lo(ivector_table), %g2 | 436 | or %g2, %lo(ivector_table), %g2 |
436 | add %g2, %g3, %g3 | 437 | add %g2, %g3, %g3 |
437 | ldub [%g3 + 0x04], %g4 /* pil */ | ||
438 | mov 1, %g2 | ||
439 | sllx %g2, %g4, %g2 | ||
440 | sllx %g4, 2, %g4 | ||
441 | 438 | ||
442 | TRAP_LOAD_IRQ_WORK(%g6, %g1) | 439 | TRAP_LOAD_IRQ_WORK(%g6, %g1) |
443 | 440 | ||
444 | lduw [%g6 + %g4], %g5 /* g5 = irq_work(cpu, pil) */ | 441 | lduw [%g6], %g5 /* g5 = irq_work(cpu) */ |
445 | stw %g5, [%g3 + 0x00] /* bucket->irq_chain = g5 */ | 442 | stw %g5, [%g3 + 0x00] /* bucket->irq_chain = g5 */ |
446 | stw %g3, [%g6 + %g4] /* irq_work(cpu, pil) = bucket */ | 443 | stw %g3, [%g6] /* irq_work(cpu) = bucket */ |
447 | wr %g2, 0x0, %set_softint | 444 | wr %g0, 1 << PIL_DEVICE_IRQ, %set_softint |
448 | retry | 445 | retry |
449 | do_ivec_xcall: | 446 | do_ivec_xcall: |
450 | mov 0x50, %g1 | 447 | mov 0x50, %g1 |