]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/maccess: add no DAT mode to kernel_write
authorVasily Gorbik <gor@linux.ibm.com>
Wed, 24 Jun 2020 15:39:14 +0000 (17:39 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 15:32:02 +0000 (16:32 +0100)
commit d6df52e9996dcc2062c3d9c9123288468bb95b52 upstream.

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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/s390/mm/maccess.c

index 7be06475809b875fd513173c617fe6683fb1f37d..a40739ea3805e423327bbb200e4aa1f9852e816c 100644 (file)
@@ -58,13 +58,19 @@ static notrace long s390_kernel_write_odd(void *dst, const void *src, size_t siz
  */
 void notrace s390_kernel_write(void *dst, const void *src, size_t size)
 {
+       unsigned long flags;
        long copied;
 
-       while (size) {
-               copied = s390_kernel_write_odd(dst, src, size);
-               dst += copied;
-               src += copied;
-               size -= copied;
+       flags = arch_local_save_flags();
+       if (!(flags & PSW_MASK_DAT)) {
+               memcpy(dst, src, size);
+       } else {
+               while (size) {
+                       copied = s390_kernel_write_odd(dst, src, size);
+                       dst += copied;
+                       src += copied;
+                       size -= copied;
+               }
        }
 }