diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S
index b88205224f3c997e1b75a3b77a5fecee2dad7543..6ace43d7e8d2105ea3578af207d76af66a1f6153 100644
--- a/arch/s390/kernel/mcount.S
+++ b/arch/s390/kernel/mcount.S
@@ -33,9 +33,16 @@ ENDPROC(ftrace_stub)
 	stg	%r14,(__SF_GPRS+8*8)(%r15)	# save traced function caller
 
 	.if \allregs == 1
-	lghi	%r14,0				# save condition code
-	ipm	%r14				# don't put any instructions
-	sllg	%r14,%r14,16			# clobbering CC before this point
+	# save psw mask
+	# don't put any instructions clobbering CC before this point
+#ifdef CONFIG_HAVE_MARCH_Z10_FEATURES
+	epsw	%r1,%r14
+	risbg	%r14,%r1,0,31,32
+#else
+	epsw	%r14,%r1
+	sllg	%r14,%r14,32
+	lr	%r14,%r1
+#endif
 	.endif
 
 	lgr	%r1,%r15
@@ -51,7 +58,6 @@ ENDPROC(ftrace_stub)
 
 	.if \allregs == 1
 	stg	%r14,(STACK_PTREGS_PSW)(%r15)
-	stosm	(STACK_PTREGS_PSW)(%r15),0
 #ifdef CONFIG_HAVE_MARCH_Z10_FEATURES
 	mvghi	STACK_PTREGS_FLAGS(%r15),_PIF_FTRACE_FULL_REGS
 #else