| From a8cbe20a761f9b990ad0725af83f70afaf123fea 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 |
| |