aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/entry64.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel/entry64.S')
-rw-r--r--arch/s390/kernel/entry64.S52
1 files changed, 21 insertions, 31 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
index 229fe1d07749..349b7eeb348a 100644
--- a/arch/s390/kernel/entry64.S
+++ b/arch/s390/kernel/entry64.S
@@ -1,8 +1,7 @@
1/* 1/*
2 * arch/s390/kernel/entry64.S
3 * S390 low-level entry points. 2 * S390 low-level entry points.
4 * 3 *
5 * Copyright (C) IBM Corp. 1999,2012 4 * Copyright IBM Corp. 1999, 2012
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 5 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * Hartmut Penner (hp@de.ibm.com), 6 * Hartmut Penner (hp@de.ibm.com),
8 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), 7 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
@@ -18,6 +17,7 @@
18#include <asm/asm-offsets.h> 17#include <asm/asm-offsets.h>
19#include <asm/unistd.h> 18#include <asm/unistd.h>
20#include <asm/page.h> 19#include <asm/page.h>
20#include <asm/sigp.h>
21 21
22__PT_R0 = __PT_GPRS 22__PT_R0 = __PT_GPRS
23__PT_R1 = __PT_GPRS + 8 23__PT_R1 = __PT_GPRS + 8
@@ -642,15 +642,11 @@ ext_skip:
642 * Load idle PSW. The second "half" of this function is in cleanup_idle. 642 * Load idle PSW. The second "half" of this function is in cleanup_idle.
643 */ 643 */
644ENTRY(psw_idle) 644ENTRY(psw_idle)
645 stg %r4,__SF_EMPTY(%r15) 645 stg %r3,__SF_EMPTY(%r15)
646 larl %r1,psw_idle_lpsw+4 646 larl %r1,psw_idle_lpsw+4
647 stg %r1,__SF_EMPTY+8(%r15) 647 stg %r1,__SF_EMPTY+8(%r15)
648 larl %r1,.Lvtimer_max 648 STCK __CLOCK_IDLE_ENTER(%r2)
649 STCK __IDLE_ENTER(%r2) 649 stpt __TIMER_IDLE_ENTER(%r2)
650 ltr %r5,%r5
651 stpt __VQ_IDLE_ENTER(%r3)
652 jz psw_idle_lpsw
653 spt 0(%r1)
654psw_idle_lpsw: 650psw_idle_lpsw:
655 lpswe __SF_EMPTY(%r15) 651 lpswe __SF_EMPTY(%r15)
656 br %r14 652 br %r14
@@ -750,15 +746,17 @@ ENTRY(restart_int_handler)
750 mvc __PT_PSW(16,%r15),__LC_RST_OLD_PSW # store restart old psw 746 mvc __PT_PSW(16,%r15),__LC_RST_OLD_PSW # store restart old psw
751 aghi %r15,-STACK_FRAME_OVERHEAD # create stack frame on stack 747 aghi %r15,-STACK_FRAME_OVERHEAD # create stack frame on stack
752 xc 0(STACK_FRAME_OVERHEAD,%r15),0(%r15) 748 xc 0(STACK_FRAME_OVERHEAD,%r15),0(%r15)
753 lmg %r1,%r3,__LC_RESTART_FN # load fn, parm & source cpu 749 lg %r1,__LC_RESTART_FN # load fn, parm & source cpu
750 lg %r2,__LC_RESTART_DATA
751 lg %r3,__LC_RESTART_SOURCE
754 ltgr %r3,%r3 # test source cpu address 752 ltgr %r3,%r3 # test source cpu address
755 jm 1f # negative -> skip source stop 753 jm 1f # negative -> skip source stop
7560: sigp %r4,%r3,1 # sigp sense to source cpu 7540: sigp %r4,%r3,SIGP_SENSE # sigp sense to source cpu
757 brc 10,0b # wait for status stored 755 brc 10,0b # wait for status stored
7581: basr %r14,%r1 # call function 7561: basr %r14,%r1 # call function
759 stap __SF_EMPTY(%r15) # store cpu address 757 stap __SF_EMPTY(%r15) # store cpu address
760 llgh %r3,__SF_EMPTY(%r15) 758 llgh %r3,__SF_EMPTY(%r15)
7612: sigp %r4,%r3,5 # sigp stop to current cpu 7592: sigp %r4,%r3,SIGP_STOP # sigp stop to current cpu
762 brc 2,2b 760 brc 2,2b
7633: j 3b 7613: j 3b
764 762
@@ -916,33 +914,28 @@ cleanup_io_restore_insn:
916 914
917cleanup_idle: 915cleanup_idle:
918 # copy interrupt clock & cpu timer 916 # copy interrupt clock & cpu timer
919 mvc __IDLE_EXIT(8,%r2),__LC_INT_CLOCK 917 mvc __CLOCK_IDLE_EXIT(8,%r2),__LC_INT_CLOCK
920 mvc __VQ_IDLE_EXIT(8,%r3),__LC_ASYNC_ENTER_TIMER 918 mvc __TIMER_IDLE_EXIT(8,%r2),__LC_ASYNC_ENTER_TIMER
921 cghi %r11,__LC_SAVE_AREA_ASYNC 919 cghi %r11,__LC_SAVE_AREA_ASYNC
922 je 0f 920 je 0f
923 mvc __IDLE_EXIT(8,%r2),__LC_MCCK_CLOCK 921 mvc __CLOCK_IDLE_EXIT(8,%r2),__LC_MCCK_CLOCK
924 mvc __VQ_IDLE_EXIT(8,%r3),__LC_MCCK_ENTER_TIMER 922 mvc __TIMER_IDLE_EXIT(8,%r2),__LC_MCCK_ENTER_TIMER
9250: # check if stck & stpt have been executed 9230: # check if stck & stpt have been executed
926 clg %r9,BASED(cleanup_idle_insn) 924 clg %r9,BASED(cleanup_idle_insn)
927 jhe 1f 925 jhe 1f
928 mvc __IDLE_ENTER(8,%r2),__IDLE_EXIT(%r2) 926 mvc __CLOCK_IDLE_ENTER(8,%r2),__CLOCK_IDLE_EXIT(%r2)
929 mvc __VQ_IDLE_ENTER(8,%r3),__VQ_IDLE_EXIT(%r3) 927 mvc __TIMER_IDLE_ENTER(8,%r2),__TIMER_IDLE_EXIT(%r2)
930 j 2f 9281: # account system time going idle
9311: # check if the cpu timer has been reprogrammed
932 ltr %r5,%r5
933 jz 2f
934 spt __VQ_IDLE_ENTER(%r3)
9352: # account system time going idle
936 lg %r9,__LC_STEAL_TIMER 929 lg %r9,__LC_STEAL_TIMER
937 alg %r9,__IDLE_ENTER(%r2) 930 alg %r9,__CLOCK_IDLE_ENTER(%r2)
938 slg %r9,__LC_LAST_UPDATE_CLOCK 931 slg %r9,__LC_LAST_UPDATE_CLOCK
939 stg %r9,__LC_STEAL_TIMER 932 stg %r9,__LC_STEAL_TIMER
940 mvc __LC_LAST_UPDATE_CLOCK(8),__IDLE_EXIT(%r2) 933 mvc __LC_LAST_UPDATE_CLOCK(8),__CLOCK_IDLE_EXIT(%r2)
941 lg %r9,__LC_SYSTEM_TIMER 934 lg %r9,__LC_SYSTEM_TIMER
942 alg %r9,__LC_LAST_UPDATE_TIMER 935 alg %r9,__LC_LAST_UPDATE_TIMER
943 slg %r9,__VQ_IDLE_ENTER(%r3) 936 slg %r9,__TIMER_IDLE_ENTER(%r2)
944 stg %r9,__LC_SYSTEM_TIMER 937 stg %r9,__LC_SYSTEM_TIMER
945 mvc __LC_LAST_UPDATE_TIMER(8),__VQ_IDLE_EXIT(%r3) 938 mvc __LC_LAST_UPDATE_TIMER(8),__TIMER_IDLE_EXIT(%r2)
946 # prepare return psw 939 # prepare return psw
947 nihh %r8,0xfffd # clear wait state bit 940 nihh %r8,0xfffd # clear wait state bit
948 lg %r9,48(%r11) # return from psw_idle 941 lg %r9,48(%r11) # return from psw_idle
@@ -958,8 +951,6 @@ cleanup_idle_insn:
958 .quad __critical_start 951 .quad __critical_start
959.Lcritical_length: 952.Lcritical_length:
960 .quad __critical_end - __critical_start 953 .quad __critical_end - __critical_start
961.Lvtimer_max:
962 .quad 0x7fffffffffffffff
963 954
964 955
965#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE) 956#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
@@ -974,7 +965,6 @@ ENTRY(sie64a)
974 stg %r3,__SF_EMPTY+8(%r15) # save guest register save area 965 stg %r3,__SF_EMPTY+8(%r15) # save guest register save area
975 xc __SF_EMPTY+16(8,%r15),__SF_EMPTY+16(%r15) # host id == 0 966 xc __SF_EMPTY+16(8,%r15),__SF_EMPTY+16(%r15) # host id == 0
976 lmg %r0,%r13,0(%r3) # load guest gprs 0-13 967 lmg %r0,%r13,0(%r3) # load guest gprs 0-13
977 lg %r14,__LC_THREAD_INFO # pointer thread_info struct
978sie_loop: 968sie_loop:
979 lg %r14,__LC_THREAD_INFO # pointer thread_info struct 969 lg %r14,__LC_THREAD_INFO # pointer thread_info struct
980 tm __TI_flags+7(%r14),_TIF_EXIT_SIE 970 tm __TI_flags+7(%r14),_TIF_EXIT_SIE