diff options
Diffstat (limited to 'arch/s390/kernel/entry64.S')
| -rw-r--r-- | arch/s390/kernel/entry64.S | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 1ca499fa54b4..56f5f613b868 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
| @@ -58,6 +58,19 @@ _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \ | |||
| 58 | 58 | ||
| 59 | #define BASED(name) name-system_call(%r13) | 59 | #define BASED(name) name-system_call(%r13) |
| 60 | 60 | ||
| 61 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
| 62 | .macro TRACE_IRQS_ON | ||
| 63 | brasl %r14,trace_hardirqs_on | ||
| 64 | .endm | ||
| 65 | |||
| 66 | .macro TRACE_IRQS_OFF | ||
| 67 | brasl %r14,trace_hardirqs_off | ||
| 68 | .endm | ||
| 69 | #else | ||
| 70 | #define TRACE_IRQS_ON | ||
| 71 | #define TRACE_IRQS_OFF | ||
| 72 | #endif | ||
| 73 | |||
| 61 | .macro STORE_TIMER lc_offset | 74 | .macro STORE_TIMER lc_offset |
| 62 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 75 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING |
| 63 | stpt \lc_offset | 76 | stpt \lc_offset |
| @@ -354,6 +367,7 @@ ret_from_fork: | |||
| 354 | jo 0f | 367 | jo 0f |
| 355 | stg %r15,SP_R15(%r15) # store stack pointer for new kthread | 368 | stg %r15,SP_R15(%r15) # store stack pointer for new kthread |
| 356 | 0: brasl %r14,schedule_tail | 369 | 0: brasl %r14,schedule_tail |
| 370 | TRACE_IRQS_ON | ||
| 357 | stosm 24(%r15),0x03 # reenable interrupts | 371 | stosm 24(%r15),0x03 # reenable interrupts |
| 358 | j sysc_return | 372 | j sysc_return |
| 359 | 373 | ||
| @@ -535,6 +549,7 @@ pgm_no_vtime3: | |||
| 535 | mvc __THREAD_per+__PER_address(8,%r1),__LC_PER_ADDRESS | 549 | mvc __THREAD_per+__PER_address(8,%r1),__LC_PER_ADDRESS |
| 536 | mvc __THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID | 550 | mvc __THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID |
| 537 | oi __TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP | 551 | oi __TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP |
| 552 | TRACE_IRQS_ON | ||
| 538 | stosm __SF_EMPTY(%r15),0x03 # reenable interrupts | 553 | stosm __SF_EMPTY(%r15),0x03 # reenable interrupts |
| 539 | j sysc_do_svc | 554 | j sysc_do_svc |
| 540 | 555 | ||
| @@ -557,8 +572,10 @@ io_int_handler: | |||
| 557 | io_no_vtime: | 572 | io_no_vtime: |
| 558 | #endif | 573 | #endif |
| 559 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 574 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 575 | TRACE_IRQS_OFF | ||
| 560 | la %r2,SP_PTREGS(%r15) # address of register-save area | 576 | la %r2,SP_PTREGS(%r15) # address of register-save area |
| 561 | brasl %r14,do_IRQ # call standard irq handler | 577 | brasl %r14,do_IRQ # call standard irq handler |
| 578 | TRACE_IRQS_ON | ||
| 562 | 579 | ||
| 563 | io_return: | 580 | io_return: |
| 564 | tm SP_PSW+1(%r15),0x01 # returning to user ? | 581 | tm SP_PSW+1(%r15),0x01 # returning to user ? |
| @@ -665,9 +682,11 @@ ext_int_handler: | |||
| 665 | ext_no_vtime: | 682 | ext_no_vtime: |
| 666 | #endif | 683 | #endif |
| 667 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 684 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 685 | TRACE_IRQS_OFF | ||
| 668 | la %r2,SP_PTREGS(%r15) # address of register-save area | 686 | la %r2,SP_PTREGS(%r15) # address of register-save area |
| 669 | llgh %r3,__LC_EXT_INT_CODE # get interruption code | 687 | llgh %r3,__LC_EXT_INT_CODE # get interruption code |
| 670 | brasl %r14,do_extint | 688 | brasl %r14,do_extint |
| 689 | TRACE_IRQS_ON | ||
| 671 | j io_return | 690 | j io_return |
| 672 | 691 | ||
| 673 | __critical_end: | 692 | __critical_end: |
| @@ -743,7 +762,9 @@ mcck_no_vtime: | |||
| 743 | stosm __SF_EMPTY(%r15),0x04 # turn dat on | 762 | stosm __SF_EMPTY(%r15),0x04 # turn dat on |
| 744 | tm __TI_flags+7(%r9),_TIF_MCCK_PENDING | 763 | tm __TI_flags+7(%r9),_TIF_MCCK_PENDING |
| 745 | jno mcck_return | 764 | jno mcck_return |
| 765 | TRACE_IRQS_OFF | ||
| 746 | brasl %r14,s390_handle_mcck | 766 | brasl %r14,s390_handle_mcck |
| 767 | TRACE_IRQS_ON | ||
| 747 | mcck_return: | 768 | mcck_return: |
| 748 | mvc __LC_RETURN_MCCK_PSW(16),SP_PSW(%r15) # move return PSW | 769 | mvc __LC_RETURN_MCCK_PSW(16),SP_PSW(%r15) # move return PSW |
| 749 | ni __LC_RETURN_MCCK_PSW+1,0xfd # clear wait state bit | 770 | ni __LC_RETURN_MCCK_PSW+1,0xfd # clear wait state bit |
