summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <hca@linux.ibm.com>2021-06-09 22:59:13 +0200
committerVasily Gorbik <gor@linux.ibm.com>2021-06-18 16:41:21 +0200
commitddd38fd261e7cd7772caea0128d0bee65bf1b159 (patch)
treeeaefff3db2d607923b49f23713addabe51f47dbb
parent4f38c7aefed3c5c4e0d57837ad4c81cfad05df50 (diff)
downloadlinux-ddd38fd261e7cd7772caea0128d0bee65bf1b159.tar.gz
linux-ddd38fd261e7cd7772caea0128d0bee65bf1b159.tar.bz2
linux-ddd38fd261e7cd7772caea0128d0bee65bf1b159.zip
s390/smp: use register pair instead of register asm
Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
-rw-r--r--arch/s390/kernel/smp.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index e137c840a4d3..c8493e7205ce 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -1233,21 +1233,21 @@ subsys_initcall(s390_smp_init);
static __always_inline void set_new_lowcore(struct lowcore *lc)
{
- struct lowcore *old_lc = &S390_lowcore;
- struct lowcore *new_lc = lc;
+ union register_pair dst, src;
u32 pfx;
- register struct lowcore *reg2 asm ("2") = new_lc;
- register unsigned long reg3 asm ("3") = sizeof(*reg2);
- register struct lowcore *reg4 asm ("4") = old_lc;
- register unsigned long reg5 asm ("5") = sizeof(*reg4);
+
+ src.even = (unsigned long) &S390_lowcore;
+ src.odd = sizeof(S390_lowcore);
+ dst.even = (unsigned long) lc;
+ dst.odd = sizeof(*lc);
+ pfx = (unsigned long) lc;
asm volatile(
- " st 2,%[pfx]\n"
- " mvcl 2,4\n"
+ " mvcl %[dst],%[src]\n"
" spx %[pfx]\n"
- : "+&d" (reg2), "+&d" (reg3),
- "+&d" (reg4), "+&d" (reg5), [pfx] "=Q" (pfx)
- : : "memory", "cc");
+ : [dst] "+&d" (dst.pair), [src] "+&d" (src.pair)
+ : [pfx] "Q" (pfx)
+ : "memory", "cc");
}
static int __init smp_reinit_ipl_cpu(void)