--- /dev/null
+From a15a64a20213d8e60a85453e5ab891b7bf19d012 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 29 Apr 2020 10:24:47 -0500
+Subject: s390: Change s390_kernel_write() return type to match memcpy()
+
+From: Josh Poimboeuf <jpoimboe@redhat.com>
+
+[ Upstream commit cb2cceaefb4c4dc28fc27ff1f1b2d258bfc10353 ]
+
+s390_kernel_write()'s function type is almost identical to memcpy().
+Change its return type to "void *" so they can be used interchangeably.
+
+Cc: linux-s390@vger.kernel.org
+Cc: heiko.carstens@de.ibm.com
+Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
+Acked-by: Joe Lawrence <joe.lawrence@redhat.com>
+Acked-by: Miroslav Benes <mbenes@suse.cz>
+Acked-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> # s390
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/s390/include/asm/uaccess.h | 2 +-
+ arch/s390/mm/maccess.c | 9 ++++++---
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/arch/s390/include/asm/uaccess.h b/arch/s390/include/asm/uaccess.h
+index a470f1fa9f2af..324438889fe16 100644
+--- a/arch/s390/include/asm/uaccess.h
++++ b/arch/s390/include/asm/uaccess.h
+@@ -276,6 +276,6 @@ static inline unsigned long __must_check clear_user(void __user *to, unsigned lo
+ }
+
+ int copy_to_user_real(void __user *dest, void *src, unsigned long count);
+-void s390_kernel_write(void *dst, const void *src, size_t size);
++void *s390_kernel_write(void *dst, const void *src, size_t size);
+
+ #endif /* __S390_UACCESS_H */
+diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
+index de7ca4b6718f1..22a0be655f27a 100644
+--- a/arch/s390/mm/maccess.c
++++ b/arch/s390/mm/maccess.c
+@@ -55,19 +55,22 @@ static notrace long s390_kernel_write_odd(void *dst, const void *src, size_t siz
+ */
+ static DEFINE_SPINLOCK(s390_kernel_write_lock);
+
+-void notrace s390_kernel_write(void *dst, const void *src, size_t size)
++notrace void *s390_kernel_write(void *dst, const void *src, size_t size)
+ {
++ void *tmp = dst;
+ unsigned long flags;
+ long copied;
+
+ spin_lock_irqsave(&s390_kernel_write_lock, flags);
+ while (size) {
+- copied = s390_kernel_write_odd(dst, src, size);
+- dst += copied;
++ copied = s390_kernel_write_odd(tmp, src, size);
++ tmp += copied;
+ src += copied;
+ size -= copied;
+ }
+ spin_unlock_irqrestore(&s390_kernel_write_lock, flags);
++
++ return dst;
+ }
+
+ static int __no_sanitize_address __memcpy_real(void *dest, void *src, size_t count)
+--
+2.25.1
+
--- /dev/null
+From 9644120dd9b51ce82b384dcf2236c2a2324fddee Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 24 Jun 2020 17:39:14 +0200
+Subject: s390/maccess: add no DAT mode to kernel_write
+
+From: Vasily Gorbik <gor@linux.ibm.com>
+
+[ Upstream commit d6df52e9996dcc2062c3d9c9123288468bb95b52 ]
+
+To be able to patch kernel code before paging is initialized do plain
+memcpy if DAT is off. This is required to enable early jump label
+initialization.
+
+Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/s390/mm/maccess.c | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
+index 22a0be655f27a..1d17413b319a4 100644
+--- a/arch/s390/mm/maccess.c
++++ b/arch/s390/mm/maccess.c
+@@ -62,11 +62,15 @@ notrace void *s390_kernel_write(void *dst, const void *src, size_t size)
+ long copied;
+
+ spin_lock_irqsave(&s390_kernel_write_lock, flags);
+- while (size) {
+- copied = s390_kernel_write_odd(tmp, src, size);
+- tmp += copied;
+- src += copied;
+- size -= copied;
++ if (!(flags & PSW_MASK_DAT)) {
++ memcpy(dst, src, size);
++ } else {
++ while (size) {
++ copied = s390_kernel_write_odd(tmp, src, size);
++ tmp += copied;
++ src += copied;
++ size -= copied;
++ }
+ }
+ spin_unlock_irqrestore(&s390_kernel_write_lock, flags);
+
+--
+2.25.1
+