diff options
Diffstat (limited to 'arch/s390/kernel/entry64.S')
-rw-r--r-- | arch/s390/kernel/entry64.S | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 4c17eece707e..bc5864c5148b 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
@@ -460,10 +460,18 @@ io_skip: | |||
460 | stmg %r0,%r7,__PT_R0(%r11) | 460 | stmg %r0,%r7,__PT_R0(%r11) |
461 | mvc __PT_R8(64,%r11),__LC_SAVE_AREA_ASYNC | 461 | mvc __PT_R8(64,%r11),__LC_SAVE_AREA_ASYNC |
462 | stmg %r8,%r9,__PT_PSW(%r11) | 462 | stmg %r8,%r9,__PT_PSW(%r11) |
463 | mvc __PT_INT_CODE(12,%r11),__LC_SUBCHANNEL_ID | ||
463 | TRACE_IRQS_OFF | 464 | TRACE_IRQS_OFF |
464 | xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) | 465 | xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) |
466 | io_loop: | ||
465 | lgr %r2,%r11 # pass pointer to pt_regs | 467 | lgr %r2,%r11 # pass pointer to pt_regs |
466 | brasl %r14,do_IRQ | 468 | brasl %r14,do_IRQ |
469 | tm __LC_MACHINE_FLAGS+6,0x10 # MACHINE_FLAG_LPAR | ||
470 | jz io_return | ||
471 | tpi 0 | ||
472 | jz io_return | ||
473 | mvc __PT_INT_CODE(12,%r11),__LC_SUBCHANNEL_ID | ||
474 | j io_loop | ||
467 | io_return: | 475 | io_return: |
468 | LOCKDEP_SYS_EXIT | 476 | LOCKDEP_SYS_EXIT |
469 | TRACE_IRQS_ON | 477 | TRACE_IRQS_ON |
@@ -605,13 +613,13 @@ ext_skip: | |||
605 | stmg %r0,%r7,__PT_R0(%r11) | 613 | stmg %r0,%r7,__PT_R0(%r11) |
606 | mvc __PT_R8(64,%r11),__LC_SAVE_AREA_ASYNC | 614 | mvc __PT_R8(64,%r11),__LC_SAVE_AREA_ASYNC |
607 | stmg %r8,%r9,__PT_PSW(%r11) | 615 | stmg %r8,%r9,__PT_PSW(%r11) |
616 | lghi %r1,__LC_EXT_PARAMS2 | ||
617 | mvc __PT_INT_CODE(4,%r11),__LC_EXT_CPU_ADDR | ||
618 | mvc __PT_INT_PARM(4,%r11),__LC_EXT_PARAMS | ||
619 | mvc __PT_INT_PARM_LONG(8,%r11),0(%r1) | ||
608 | TRACE_IRQS_OFF | 620 | TRACE_IRQS_OFF |
609 | xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) | 621 | xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) |
610 | lghi %r1,4096 | ||
611 | lgr %r2,%r11 # pass pointer to pt_regs | 622 | lgr %r2,%r11 # pass pointer to pt_regs |
612 | llgf %r3,__LC_EXT_CPU_ADDR # get cpu address + interruption code | ||
613 | llgf %r4,__LC_EXT_PARAMS # get external parameter | ||
614 | lg %r5,__LC_EXT_PARAMS2-4096(%r1) # get 64 bit external parameter | ||
615 | brasl %r14,do_extint | 623 | brasl %r14,do_extint |
616 | j io_return | 624 | j io_return |
617 | 625 | ||