diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
index fec59c067d0dddf8ecb4a550124691d0838cda46..350b0acd7f5257036ba12c6fbb5b9733274e3d9f 100644
--- a/arch/s390/mm/maccess.c
+++ b/arch/s390/mm/maccess.c
@@ -101,7 +101,9 @@ int memcpy_real(void *dest, void *src, size_t count)
 	local_irq_save(flags);
 	__arch_local_irq_stnsm(0xfbUL);
 	rc = __memcpy_real(dest, src, count);
-	local_irq_restore(flags);
+	if (!arch_irqs_disabled_flags(flags))
+		trace_hardirqs_on();
+	__arch_local_irq_ssm(flags);
 	return rc;
 }