diff options
| -rw-r--r-- | arch/s390/include/asm/sigp.h | 17 | ||||
| -rw-r--r-- | arch/s390/kernel/smp.c | 8 | 
2 files changed, 15 insertions, 10 deletions
| diff --git a/arch/s390/include/asm/sigp.h b/arch/s390/include/asm/sigp.h index 1c8f33fca356..72df5f2de6b0 100644 --- a/arch/s390/include/asm/sigp.h +++ b/arch/s390/include/asm/sigp.h @@ -37,8 +37,8 @@  #ifndef __ASSEMBLY__ -static inline int __pcpu_sigp(u16 addr, u8 order, unsigned long parm, -			      u32 *status) +static inline int ____pcpu_sigp(u16 addr, u8 order, unsigned long parm, +				u32 *status)  {  	register unsigned long reg1 asm ("1") = parm;  	int cc; @@ -48,8 +48,19 @@ static inline int __pcpu_sigp(u16 addr, u8 order, unsigned long parm,  		"	ipm	%0\n"  		"	srl	%0,28\n"  		: "=d" (cc), "+d" (reg1) : "d" (addr), "a" (order) : "cc"); +	*status = reg1; +	return cc; +} + +static inline int __pcpu_sigp(u16 addr, u8 order, unsigned long parm, +			      u32 *status) +{ +	u32 _status; +	int cc; + +	cc = ____pcpu_sigp(addr, order, parm, &_status);  	if (status && cc == 1) -		*status = reg1; +		*status = _status;  	return cc;  } diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 830537432493..5c8f7caf9f31 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c @@ -318,17 +318,11 @@ static void pcpu_delegate(struct pcpu *pcpu, void (*func)(void *),   */  static int pcpu_set_smt(unsigned int mtid)  { -	register unsigned long reg1 asm ("1") = (unsigned long) mtid;  	int cc;  	if (smp_cpu_mtid == mtid)  		return 0; -	asm volatile( -		"	sigp	%1,0,%2	# sigp set multi-threading\n" -		"	ipm	%0\n" -		"	srl	%0,28\n" -		: "=d" (cc) : "d" (reg1), "K" (SIGP_SET_MULTI_THREADING) -		: "cc"); +	cc = __pcpu_sigp(0, SIGP_SET_MULTI_THREADING, mtid, NULL);  	if (cc == 0) {  		smp_cpu_mtid = mtid;  		smp_cpu_mt_shift = 0; | 
