summaryrefslogtreecommitdiff
path: root/arch/s390/kernel
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2018-05-04 12:58:00 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2018-05-09 10:55:01 +0200
commit1155a26a25af2c4d1f32caa3d4bae46a1c07cf73 (patch)
tree2e88dbe7ea5d72229a60d66511ce3291b39698fe /arch/s390/kernel
parent77715b7ddb446bd39a06f3376e85f4bb95b29bb8 (diff)
s390/early: get rid of memmove_early
memmove_early was introduced with commit d543a106f96d6 ("s390: fix initrd corruptions with gcov/kcov instrumented kernels"). The reason for writing this extra memmove implementation was to be able to move memory from an unknown location (aka SCSI IPL parameter block) to a known location. This had to done early before it was known if the SCSI IPL parameter block pointer was valid or not, and therefore the memmove implementation was supposed to be able to handle program checks. The code has been changed and especially with commit d08091ac9654 ("s390/ipl: rely on diag308 store to get ipl info") and commit b4623d4e5b23 ("s390: provide memmove implementation") there is no need to have a memmove version that can handle program checks, and in addition it cannot be gcov/kcov instrumented anymore. Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Reviewed-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel')
-rw-r--r--arch/s390/kernel/early.c34
1 files changed, 1 insertions, 33 deletions
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c
index 32daa0f84325..f40e1f293619 100644
--- a/arch/s390/kernel/early.c
+++ b/arch/s390/kernel/early.c
@@ -310,38 +310,6 @@ static int __init cad_setup(char *str)
}
early_param("cad", cad_setup);
-static __init void memmove_early(void *dst, const void *src, size_t n)
-{
- unsigned long addr;
- long incr;
- psw_t old;
-
- if (!n)
- return;
- incr = 1;
- if (dst > src) {
- incr = -incr;
- dst += n - 1;
- src += n - 1;
- }
- old = S390_lowcore.program_new_psw;
- S390_lowcore.program_new_psw.mask = __extract_psw();
- asm volatile(
- " larl %[addr],1f\n"
- " stg %[addr],%[psw_pgm_addr]\n"
- "0: mvc 0(1,%[dst]),0(%[src])\n"
- " agr %[dst],%[incr]\n"
- " agr %[src],%[incr]\n"
- " brctg %[n],0b\n"
- "1:\n"
- : [addr] "=&d" (addr),
- [psw_pgm_addr] "=Q" (S390_lowcore.program_new_psw.addr),
- [dst] "+&a" (dst), [src] "+&a" (src), [n] "+d" (n)
- : [incr] "d" (incr)
- : "cc", "memory");
- S390_lowcore.program_new_psw = old;
-}
-
static __init noinline void rescue_initrd(void)
{
#ifdef CONFIG_BLK_DEV_INITRD
@@ -356,7 +324,7 @@ static __init noinline void rescue_initrd(void)
return;
if (INITRD_START >= min_initrd_addr)
return;
- memmove_early((void *) min_initrd_addr, (void *) INITRD_START, INITRD_SIZE);
+ memmove((void *) min_initrd_addr, (void *) INITRD_START, INITRD_SIZE);
INITRD_START = min_initrd_addr;
#endif
}