diff options
Diffstat (limited to 'arch/s390/kernel/entry64.S')
| -rw-r--r-- | arch/s390/kernel/entry64.S | 52 | 
1 files changed, 21 insertions, 31 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 229fe1d0774..349b7eeb348 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S @@ -1,8 +1,7 @@  /* - *  arch/s390/kernel/entry64.S   *    S390 low-level entry points.   * - *    Copyright (C) IBM Corp. 1999,2012 + *    Copyright IBM Corp. 1999, 2012   *    Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),   *		 Hartmut Penner (hp@de.ibm.com),   *		 Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), @@ -18,6 +17,7 @@  #include <asm/asm-offsets.h>  #include <asm/unistd.h>  #include <asm/page.h> +#include <asm/sigp.h>  __PT_R0      =	__PT_GPRS  __PT_R1      =	__PT_GPRS + 8 @@ -642,15 +642,11 @@ ext_skip:   * Load idle PSW. The second "half" of this function is in cleanup_idle.   */  ENTRY(psw_idle) -	stg	%r4,__SF_EMPTY(%r15) +	stg	%r3,__SF_EMPTY(%r15)  	larl	%r1,psw_idle_lpsw+4  	stg	%r1,__SF_EMPTY+8(%r15) -	larl	%r1,.Lvtimer_max -	STCK	__IDLE_ENTER(%r2) -	ltr	%r5,%r5 -	stpt	__VQ_IDLE_ENTER(%r3) -	jz	psw_idle_lpsw -	spt	0(%r1) +	STCK	__CLOCK_IDLE_ENTER(%r2) +	stpt	__TIMER_IDLE_ENTER(%r2)  psw_idle_lpsw:  	lpswe	__SF_EMPTY(%r15)  	br	%r14 @@ -750,15 +746,17 @@ ENTRY(restart_int_handler)  	mvc	__PT_PSW(16,%r15),__LC_RST_OLD_PSW # store restart old psw  	aghi	%r15,-STACK_FRAME_OVERHEAD	# create stack frame on stack  	xc	0(STACK_FRAME_OVERHEAD,%r15),0(%r15) -	lmg	%r1,%r3,__LC_RESTART_FN		# load fn, parm & source cpu +	lg	%r1,__LC_RESTART_FN		# load fn, parm & source cpu +	lg	%r2,__LC_RESTART_DATA +	lg	%r3,__LC_RESTART_SOURCE  	ltgr	%r3,%r3				# test source cpu address  	jm	1f				# negative -> skip source stop -0:	sigp	%r4,%r3,1			# sigp sense to source cpu +0:	sigp	%r4,%r3,SIGP_SENSE		# sigp sense to source cpu  	brc	10,0b				# wait for status stored  1:	basr	%r14,%r1			# call function  	stap	__SF_EMPTY(%r15)		# store cpu address  	llgh	%r3,__SF_EMPTY(%r15) -2:	sigp	%r4,%r3,5			# sigp stop to current cpu +2:	sigp	%r4,%r3,SIGP_STOP		# sigp stop to current cpu  	brc	2,2b  3:	j	3b @@ -916,33 +914,28 @@ cleanup_io_restore_insn:  cleanup_idle:  	# copy interrupt clock & cpu timer -	mvc	__IDLE_EXIT(8,%r2),__LC_INT_CLOCK -	mvc	__VQ_IDLE_EXIT(8,%r3),__LC_ASYNC_ENTER_TIMER +	mvc	__CLOCK_IDLE_EXIT(8,%r2),__LC_INT_CLOCK +	mvc	__TIMER_IDLE_EXIT(8,%r2),__LC_ASYNC_ENTER_TIMER  	cghi	%r11,__LC_SAVE_AREA_ASYNC  	je	0f -	mvc	__IDLE_EXIT(8,%r2),__LC_MCCK_CLOCK -	mvc	__VQ_IDLE_EXIT(8,%r3),__LC_MCCK_ENTER_TIMER +	mvc	__CLOCK_IDLE_EXIT(8,%r2),__LC_MCCK_CLOCK +	mvc	__TIMER_IDLE_EXIT(8,%r2),__LC_MCCK_ENTER_TIMER  0:	# check if stck & stpt have been executed  	clg	%r9,BASED(cleanup_idle_insn)  	jhe	1f -	mvc	__IDLE_ENTER(8,%r2),__IDLE_EXIT(%r2) -	mvc	__VQ_IDLE_ENTER(8,%r3),__VQ_IDLE_EXIT(%r3) -	j	2f -1:	# check if the cpu timer has been reprogrammed -	ltr	%r5,%r5 -	jz	2f -	spt	__VQ_IDLE_ENTER(%r3) -2:	# account system time going idle +	mvc	__CLOCK_IDLE_ENTER(8,%r2),__CLOCK_IDLE_EXIT(%r2) +	mvc	__TIMER_IDLE_ENTER(8,%r2),__TIMER_IDLE_EXIT(%r2) +1:	# account system time going idle  	lg	%r9,__LC_STEAL_TIMER -	alg	%r9,__IDLE_ENTER(%r2) +	alg	%r9,__CLOCK_IDLE_ENTER(%r2)  	slg	%r9,__LC_LAST_UPDATE_CLOCK  	stg	%r9,__LC_STEAL_TIMER -	mvc	__LC_LAST_UPDATE_CLOCK(8),__IDLE_EXIT(%r2) +	mvc	__LC_LAST_UPDATE_CLOCK(8),__CLOCK_IDLE_EXIT(%r2)  	lg	%r9,__LC_SYSTEM_TIMER  	alg	%r9,__LC_LAST_UPDATE_TIMER -	slg	%r9,__VQ_IDLE_ENTER(%r3) +	slg	%r9,__TIMER_IDLE_ENTER(%r2)  	stg	%r9,__LC_SYSTEM_TIMER -	mvc	__LC_LAST_UPDATE_TIMER(8),__VQ_IDLE_EXIT(%r3) +	mvc	__LC_LAST_UPDATE_TIMER(8),__TIMER_IDLE_EXIT(%r2)  	# prepare return psw  	nihh	%r8,0xfffd		# clear wait state bit  	lg	%r9,48(%r11)		# return from psw_idle @@ -958,8 +951,6 @@ cleanup_idle_insn:  	.quad	__critical_start  .Lcritical_length:  	.quad	__critical_end - __critical_start -.Lvtimer_max: -	.quad	0x7fffffffffffffff  #if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE) @@ -974,7 +965,6 @@ ENTRY(sie64a)  	stg	%r3,__SF_EMPTY+8(%r15)		# save guest register save area  	xc	__SF_EMPTY+16(8,%r15),__SF_EMPTY+16(%r15) # host id == 0  	lmg	%r0,%r13,0(%r3)			# load guest gprs 0-13 -	lg	%r14,__LC_THREAD_INFO		# pointer thread_info struct  sie_loop:  	lg	%r14,__LC_THREAD_INFO		# pointer thread_info struct  	tm	__TI_flags+7(%r14),_TIF_EXIT_SIE  |