diff options
Diffstat (limited to 'arch/s390/kernel/entry64.S')
| -rw-r--r-- | arch/s390/kernel/entry64.S | 58 |
1 files changed, 8 insertions, 50 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 89c121ae6339..16bb4fd1a403 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
| @@ -96,20 +96,12 @@ _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ | |||
| 96 | #define LOCKDEP_SYS_EXIT | 96 | #define LOCKDEP_SYS_EXIT |
| 97 | #endif | 97 | #endif |
| 98 | 98 | ||
| 99 | .macro STORE_TIMER lc_offset | ||
| 100 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 101 | stpt \lc_offset | ||
| 102 | #endif | ||
| 103 | .endm | ||
| 104 | |||
| 105 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 106 | .macro UPDATE_VTIME lc_from,lc_to,lc_sum | 99 | .macro UPDATE_VTIME lc_from,lc_to,lc_sum |
| 107 | lg %r10,\lc_from | 100 | lg %r10,\lc_from |
| 108 | slg %r10,\lc_to | 101 | slg %r10,\lc_to |
| 109 | alg %r10,\lc_sum | 102 | alg %r10,\lc_sum |
| 110 | stg %r10,\lc_sum | 103 | stg %r10,\lc_sum |
| 111 | .endm | 104 | .endm |
| 112 | #endif | ||
| 113 | 105 | ||
| 114 | /* | 106 | /* |
| 115 | * Register usage in interrupt handlers: | 107 | * Register usage in interrupt handlers: |
| @@ -186,7 +178,7 @@ _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ | |||
| 186 | ni \psworg+1,0xfd # clear wait state bit | 178 | ni \psworg+1,0xfd # clear wait state bit |
| 187 | .endif | 179 | .endif |
| 188 | lmg %r0,%r15,SP_R0(%r15) # load gprs 0-15 of user | 180 | lmg %r0,%r15,SP_R0(%r15) # load gprs 0-15 of user |
| 189 | STORE_TIMER __LC_EXIT_TIMER | 181 | stpt __LC_EXIT_TIMER |
| 190 | lpswe \psworg # back to caller | 182 | lpswe \psworg # back to caller |
| 191 | .endm | 183 | .endm |
| 192 | 184 | ||
| @@ -233,20 +225,18 @@ __critical_start: | |||
| 233 | 225 | ||
| 234 | .globl system_call | 226 | .globl system_call |
| 235 | system_call: | 227 | system_call: |
| 236 | STORE_TIMER __LC_SYNC_ENTER_TIMER | 228 | stpt __LC_SYNC_ENTER_TIMER |
| 237 | sysc_saveall: | 229 | sysc_saveall: |
| 238 | SAVE_ALL_BASE __LC_SAVE_AREA | 230 | SAVE_ALL_BASE __LC_SAVE_AREA |
| 239 | SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 231 | SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 240 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 232 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 241 | llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore | 233 | llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore |
| 242 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 243 | sysc_vtime: | 234 | sysc_vtime: |
| 244 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 235 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 245 | sysc_stime: | 236 | sysc_stime: |
| 246 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 237 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 247 | sysc_update: | 238 | sysc_update: |
| 248 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 239 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 249 | #endif | ||
| 250 | sysc_do_svc: | 240 | sysc_do_svc: |
| 251 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 241 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 252 | ltgr %r7,%r7 # test for svc 0 | 242 | ltgr %r7,%r7 # test for svc 0 |
| @@ -417,7 +407,7 @@ ret_from_fork: | |||
| 417 | 0: brasl %r14,schedule_tail | 407 | 0: brasl %r14,schedule_tail |
| 418 | TRACE_IRQS_ON | 408 | TRACE_IRQS_ON |
| 419 | stosm 24(%r15),0x03 # reenable interrupts | 409 | stosm 24(%r15),0x03 # reenable interrupts |
| 420 | j sysc_return | 410 | j sysc_tracenogo |
| 421 | 411 | ||
| 422 | # | 412 | # |
| 423 | # kernel_execve function needs to deal with pt_regs that is not | 413 | # kernel_execve function needs to deal with pt_regs that is not |
| @@ -469,20 +459,18 @@ pgm_check_handler: | |||
| 469 | * we just ignore the PER event (FIXME: is there anything we have to do | 459 | * we just ignore the PER event (FIXME: is there anything we have to do |
| 470 | * for LPSW?). | 460 | * for LPSW?). |
| 471 | */ | 461 | */ |
| 472 | STORE_TIMER __LC_SYNC_ENTER_TIMER | 462 | stpt __LC_SYNC_ENTER_TIMER |
| 473 | SAVE_ALL_BASE __LC_SAVE_AREA | 463 | SAVE_ALL_BASE __LC_SAVE_AREA |
| 474 | tm __LC_PGM_INT_CODE+1,0x80 # check whether we got a per exception | 464 | tm __LC_PGM_INT_CODE+1,0x80 # check whether we got a per exception |
| 475 | jnz pgm_per # got per exception -> special case | 465 | jnz pgm_per # got per exception -> special case |
| 476 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 466 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 477 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 467 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 478 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 479 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 468 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 480 | jz pgm_no_vtime | 469 | jz pgm_no_vtime |
| 481 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 470 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 482 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 471 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 483 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 472 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 484 | pgm_no_vtime: | 473 | pgm_no_vtime: |
| 485 | #endif | ||
| 486 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 474 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 487 | mvc SP_ARGS(8,%r15),__LC_LAST_BREAK | 475 | mvc SP_ARGS(8,%r15),__LC_LAST_BREAK |
| 488 | TRACE_IRQS_OFF | 476 | TRACE_IRQS_OFF |
| @@ -516,14 +504,12 @@ pgm_per: | |||
| 516 | pgm_per_std: | 504 | pgm_per_std: |
| 517 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 505 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 518 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 506 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 519 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 520 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 507 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 521 | jz pgm_no_vtime2 | 508 | jz pgm_no_vtime2 |
| 522 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 509 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 523 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 510 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 524 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 511 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 525 | pgm_no_vtime2: | 512 | pgm_no_vtime2: |
| 526 | #endif | ||
| 527 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 513 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 528 | TRACE_IRQS_OFF | 514 | TRACE_IRQS_OFF |
| 529 | lg %r1,__TI_task(%r9) | 515 | lg %r1,__TI_task(%r9) |
| @@ -545,11 +531,9 @@ pgm_no_vtime2: | |||
| 545 | pgm_svcper: | 531 | pgm_svcper: |
| 546 | SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 532 | SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 547 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 533 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 548 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 549 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 534 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 550 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 535 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 551 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 536 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 552 | #endif | ||
| 553 | llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore | 537 | llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore |
| 554 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 538 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 555 | lg %r1,__TI_task(%r9) | 539 | lg %r1,__TI_task(%r9) |
| @@ -575,19 +559,17 @@ kernel_per: | |||
| 575 | */ | 559 | */ |
| 576 | .globl io_int_handler | 560 | .globl io_int_handler |
| 577 | io_int_handler: | 561 | io_int_handler: |
| 578 | STORE_TIMER __LC_ASYNC_ENTER_TIMER | 562 | stpt __LC_ASYNC_ENTER_TIMER |
| 579 | stck __LC_INT_CLOCK | 563 | stck __LC_INT_CLOCK |
| 580 | SAVE_ALL_BASE __LC_SAVE_AREA+32 | 564 | SAVE_ALL_BASE __LC_SAVE_AREA+32 |
| 581 | SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+32 | 565 | SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+32 |
| 582 | CREATE_STACK_FRAME __LC_IO_OLD_PSW,__LC_SAVE_AREA+32 | 566 | CREATE_STACK_FRAME __LC_IO_OLD_PSW,__LC_SAVE_AREA+32 |
| 583 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 584 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 567 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 585 | jz io_no_vtime | 568 | jz io_no_vtime |
| 586 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER | 569 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER |
| 587 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 570 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 588 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER | 571 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 589 | io_no_vtime: | 572 | io_no_vtime: |
| 590 | #endif | ||
| 591 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 573 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 592 | TRACE_IRQS_OFF | 574 | TRACE_IRQS_OFF |
| 593 | la %r2,SP_PTREGS(%r15) # address of register-save area | 575 | la %r2,SP_PTREGS(%r15) # address of register-save area |
| @@ -739,19 +721,17 @@ io_notify_resume: | |||
| 739 | */ | 721 | */ |
| 740 | .globl ext_int_handler | 722 | .globl ext_int_handler |
| 741 | ext_int_handler: | 723 | ext_int_handler: |
| 742 | STORE_TIMER __LC_ASYNC_ENTER_TIMER | 724 | stpt __LC_ASYNC_ENTER_TIMER |
| 743 | stck __LC_INT_CLOCK | 725 | stck __LC_INT_CLOCK |
| 744 | SAVE_ALL_BASE __LC_SAVE_AREA+32 | 726 | SAVE_ALL_BASE __LC_SAVE_AREA+32 |
| 745 | SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+32 | 727 | SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+32 |
| 746 | CREATE_STACK_FRAME __LC_EXT_OLD_PSW,__LC_SAVE_AREA+32 | 728 | CREATE_STACK_FRAME __LC_EXT_OLD_PSW,__LC_SAVE_AREA+32 |
| 747 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 748 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 729 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 749 | jz ext_no_vtime | 730 | jz ext_no_vtime |
| 750 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER | 731 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER |
| 751 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 732 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 752 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER | 733 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 753 | ext_no_vtime: | 734 | ext_no_vtime: |
| 754 | #endif | ||
| 755 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 735 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 756 | TRACE_IRQS_OFF | 736 | TRACE_IRQS_OFF |
| 757 | la %r2,SP_PTREGS(%r15) # address of register-save area | 737 | la %r2,SP_PTREGS(%r15) # address of register-save area |
| @@ -773,7 +753,6 @@ mcck_int_handler: | |||
| 773 | la %r12,__LC_MCK_OLD_PSW | 753 | la %r12,__LC_MCK_OLD_PSW |
| 774 | tm __LC_MCCK_CODE,0x80 # system damage? | 754 | tm __LC_MCCK_CODE,0x80 # system damage? |
| 775 | jo mcck_int_main # yes -> rest of mcck code invalid | 755 | jo mcck_int_main # yes -> rest of mcck code invalid |
| 776 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 777 | la %r14,4095 | 756 | la %r14,4095 |
| 778 | mvc __LC_SAVE_AREA+104(8),__LC_ASYNC_ENTER_TIMER | 757 | mvc __LC_SAVE_AREA+104(8),__LC_ASYNC_ENTER_TIMER |
| 779 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_CPU_TIMER_SAVE_AREA-4095(%r14) | 758 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_CPU_TIMER_SAVE_AREA-4095(%r14) |
| @@ -791,9 +770,7 @@ mcck_int_handler: | |||
| 791 | la %r14,__LC_LAST_UPDATE_TIMER | 770 | la %r14,__LC_LAST_UPDATE_TIMER |
| 792 | 0: spt 0(%r14) | 771 | 0: spt 0(%r14) |
| 793 | mvc __LC_ASYNC_ENTER_TIMER(8),0(%r14) | 772 | mvc __LC_ASYNC_ENTER_TIMER(8),0(%r14) |
| 794 | 1: | 773 | 1: tm __LC_MCCK_CODE+2,0x09 # mwp + ia of old psw valid? |
| 795 | #endif | ||
| 796 | tm __LC_MCCK_CODE+2,0x09 # mwp + ia of old psw valid? | ||
| 797 | jno mcck_int_main # no -> skip cleanup critical | 774 | jno mcck_int_main # no -> skip cleanup critical |
| 798 | tm __LC_MCK_OLD_PSW+1,0x01 # test problem state bit | 775 | tm __LC_MCK_OLD_PSW+1,0x01 # test problem state bit |
| 799 | jnz mcck_int_main # from user -> load kernel stack | 776 | jnz mcck_int_main # from user -> load kernel stack |
| @@ -809,7 +786,6 @@ mcck_int_main: | |||
| 809 | jz 0f | 786 | jz 0f |
| 810 | lg %r15,__LC_PANIC_STACK # load panic stack | 787 | lg %r15,__LC_PANIC_STACK # load panic stack |
| 811 | 0: CREATE_STACK_FRAME __LC_MCK_OLD_PSW,__LC_SAVE_AREA+64 | 788 | 0: CREATE_STACK_FRAME __LC_MCK_OLD_PSW,__LC_SAVE_AREA+64 |
| 812 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 813 | tm __LC_MCCK_CODE+2,0x08 # mwp of old psw valid? | 789 | tm __LC_MCCK_CODE+2,0x08 # mwp of old psw valid? |
| 814 | jno mcck_no_vtime # no -> no timer update | 790 | jno mcck_no_vtime # no -> no timer update |
| 815 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 791 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| @@ -818,7 +794,6 @@ mcck_int_main: | |||
| 818 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 794 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 819 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER | 795 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 820 | mcck_no_vtime: | 796 | mcck_no_vtime: |
| 821 | #endif | ||
| 822 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 797 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 823 | la %r2,SP_PTREGS(%r15) # load pt_regs | 798 | la %r2,SP_PTREGS(%r15) # load pt_regs |
| 824 | brasl %r14,s390_do_machine_check | 799 | brasl %r14,s390_do_machine_check |
| @@ -839,14 +814,11 @@ mcck_return: | |||
| 839 | mvc __LC_RETURN_MCCK_PSW(16),SP_PSW(%r15) # move return PSW | 814 | mvc __LC_RETURN_MCCK_PSW(16),SP_PSW(%r15) # move return PSW |
| 840 | ni __LC_RETURN_MCCK_PSW+1,0xfd # clear wait state bit | 815 | ni __LC_RETURN_MCCK_PSW+1,0xfd # clear wait state bit |
| 841 | lmg %r0,%r15,SP_R0(%r15) # load gprs 0-15 | 816 | lmg %r0,%r15,SP_R0(%r15) # load gprs 0-15 |
| 842 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 843 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_SAVE_AREA+104 | 817 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_SAVE_AREA+104 |
| 844 | tm __LC_RETURN_MCCK_PSW+1,0x01 # returning to user ? | 818 | tm __LC_RETURN_MCCK_PSW+1,0x01 # returning to user ? |
| 845 | jno 0f | 819 | jno 0f |
| 846 | stpt __LC_EXIT_TIMER | 820 | stpt __LC_EXIT_TIMER |
| 847 | 0: | 821 | 0: lpswe __LC_RETURN_MCCK_PSW # back to caller |
| 848 | #endif | ||
| 849 | lpswe __LC_RETURN_MCCK_PSW # back to caller | ||
| 850 | 822 | ||
| 851 | /* | 823 | /* |
| 852 | * Restart interruption handler, kick starter for additional CPUs | 824 | * Restart interruption handler, kick starter for additional CPUs |
| @@ -964,13 +936,11 @@ cleanup_system_call: | |||
| 964 | j 1f | 936 | j 1f |
| 965 | 0: la %r12,__LC_SAVE_AREA+64 | 937 | 0: la %r12,__LC_SAVE_AREA+64 |
| 966 | 1: | 938 | 1: |
| 967 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 968 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+8) | 939 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+8) |
| 969 | jh 0f | 940 | jh 0f |
| 970 | mvc __LC_SYNC_ENTER_TIMER(8),__LC_ASYNC_ENTER_TIMER | 941 | mvc __LC_SYNC_ENTER_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 971 | 0: clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+16) | 942 | 0: clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+16) |
| 972 | jhe cleanup_vtime | 943 | jhe cleanup_vtime |
| 973 | #endif | ||
| 974 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn) | 944 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn) |
| 975 | jh 0f | 945 | jh 0f |
| 976 | mvc __LC_SAVE_AREA(32),0(%r12) | 946 | mvc __LC_SAVE_AREA(32),0(%r12) |
| @@ -981,7 +951,6 @@ cleanup_system_call: | |||
| 981 | lg %r12,__LC_SAVE_AREA+96 # argh | 951 | lg %r12,__LC_SAVE_AREA+96 # argh |
| 982 | stg %r15,24(%r12) | 952 | stg %r15,24(%r12) |
| 983 | llgh %r7,__LC_SVC_INT_CODE | 953 | llgh %r7,__LC_SVC_INT_CODE |
| 984 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 985 | cleanup_vtime: | 954 | cleanup_vtime: |
| 986 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+24) | 955 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+24) |
| 987 | jhe cleanup_stime | 956 | jhe cleanup_stime |
| @@ -992,18 +961,15 @@ cleanup_stime: | |||
| 992 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 961 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 993 | cleanup_update: | 962 | cleanup_update: |
| 994 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 963 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 995 | #endif | ||
| 996 | mvc __LC_RETURN_PSW+8(8),BASED(cleanup_table_system_call+8) | 964 | mvc __LC_RETURN_PSW+8(8),BASED(cleanup_table_system_call+8) |
| 997 | la %r12,__LC_RETURN_PSW | 965 | la %r12,__LC_RETURN_PSW |
| 998 | br %r14 | 966 | br %r14 |
| 999 | cleanup_system_call_insn: | 967 | cleanup_system_call_insn: |
| 1000 | .quad sysc_saveall | 968 | .quad sysc_saveall |
| 1001 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1002 | .quad system_call | 969 | .quad system_call |
| 1003 | .quad sysc_vtime | 970 | .quad sysc_vtime |
| 1004 | .quad sysc_stime | 971 | .quad sysc_stime |
| 1005 | .quad sysc_update | 972 | .quad sysc_update |
| 1006 | #endif | ||
| 1007 | 973 | ||
| 1008 | cleanup_sysc_return: | 974 | cleanup_sysc_return: |
| 1009 | mvc __LC_RETURN_PSW(8),0(%r12) | 975 | mvc __LC_RETURN_PSW(8),0(%r12) |
| @@ -1014,11 +980,9 @@ cleanup_sysc_return: | |||
| 1014 | cleanup_sysc_leave: | 980 | cleanup_sysc_leave: |
| 1015 | clc 8(8,%r12),BASED(cleanup_sysc_leave_insn) | 981 | clc 8(8,%r12),BASED(cleanup_sysc_leave_insn) |
| 1016 | je 2f | 982 | je 2f |
| 1017 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1018 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER | 983 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 1019 | clc 8(8,%r12),BASED(cleanup_sysc_leave_insn+8) | 984 | clc 8(8,%r12),BASED(cleanup_sysc_leave_insn+8) |
| 1020 | je 2f | 985 | je 2f |
| 1021 | #endif | ||
| 1022 | mvc __LC_RETURN_PSW(16),SP_PSW(%r15) | 986 | mvc __LC_RETURN_PSW(16),SP_PSW(%r15) |
| 1023 | cghi %r12,__LC_MCK_OLD_PSW | 987 | cghi %r12,__LC_MCK_OLD_PSW |
| 1024 | jne 0f | 988 | jne 0f |
| @@ -1031,9 +995,7 @@ cleanup_sysc_leave: | |||
| 1031 | br %r14 | 995 | br %r14 |
| 1032 | cleanup_sysc_leave_insn: | 996 | cleanup_sysc_leave_insn: |
| 1033 | .quad sysc_done - 4 | 997 | .quad sysc_done - 4 |
| 1034 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1035 | .quad sysc_done - 8 | 998 | .quad sysc_done - 8 |
| 1036 | #endif | ||
| 1037 | 999 | ||
| 1038 | cleanup_io_return: | 1000 | cleanup_io_return: |
| 1039 | mvc __LC_RETURN_PSW(8),0(%r12) | 1001 | mvc __LC_RETURN_PSW(8),0(%r12) |
| @@ -1044,11 +1006,9 @@ cleanup_io_return: | |||
| 1044 | cleanup_io_leave: | 1006 | cleanup_io_leave: |
| 1045 | clc 8(8,%r12),BASED(cleanup_io_leave_insn) | 1007 | clc 8(8,%r12),BASED(cleanup_io_leave_insn) |
| 1046 | je 2f | 1008 | je 2f |
| 1047 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1048 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER | 1009 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 1049 | clc 8(8,%r12),BASED(cleanup_io_leave_insn+8) | 1010 | clc 8(8,%r12),BASED(cleanup_io_leave_insn+8) |
| 1050 | je 2f | 1011 | je 2f |
| 1051 | #endif | ||
| 1052 | mvc __LC_RETURN_PSW(16),SP_PSW(%r15) | 1012 | mvc __LC_RETURN_PSW(16),SP_PSW(%r15) |
| 1053 | cghi %r12,__LC_MCK_OLD_PSW | 1013 | cghi %r12,__LC_MCK_OLD_PSW |
| 1054 | jne 0f | 1014 | jne 0f |
| @@ -1061,9 +1021,7 @@ cleanup_io_leave: | |||
| 1061 | br %r14 | 1021 | br %r14 |
| 1062 | cleanup_io_leave_insn: | 1022 | cleanup_io_leave_insn: |
| 1063 | .quad io_done - 4 | 1023 | .quad io_done - 4 |
| 1064 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1065 | .quad io_done - 8 | 1024 | .quad io_done - 8 |
| 1066 | #endif | ||
| 1067 | 1025 | ||
| 1068 | /* | 1026 | /* |
| 1069 | * Integer constants | 1027 | * Integer constants |
