aboutsummaryrefslogtreecommitdiff
path: root/arch/s390
diff options
context:
space:
mode:
authorGravatar Heiko Carstens <heiko.carstens@de.ibm.com> 2016-12-10 10:37:32 +0100
committerGravatar Martin Schwidefsky <schwidefsky@de.ibm.com> 2016-12-14 16:33:40 +0100
commit259acc5c255a4260b3db0461afd5d93fabfe8524 (patch)
tree9211ab7aeef24e5dce04d6aee018164781ead011 /arch/s390
parents390/setup: reword printk messages (diff)
downloadlinux-259acc5c255a4260b3db0461afd5d93fabfe8524.tar.gz
linux-259acc5c255a4260b3db0461afd5d93fabfe8524.tar.bz2
linux-259acc5c255a4260b3db0461afd5d93fabfe8524.zip
s390/cpumf: fix qsi inline assembly
The qsi inline assembly takes an initialized "cc" variable as output operand but specifies it as write-to operand only instead of read/write operand. This allows the compiler to omit the initialization, which in fact it also does (gcc 6.1). Use the "+" constraint modifier to fix this. In addition also use the Q constraint to specify the hws_qsi_info_block memory location, so the compiler can generate slightly better code. Also get rid of the cc clobber since none of the instructions within the inline assembly modify the condition code. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/include/asm/cpu_mf.h10
1 files changed, 3 insertions, 7 deletions
diff --git a/arch/s390/include/asm/cpu_mf.h b/arch/s390/include/asm/cpu_mf.h
index b69d8bc231a5..428c41239a49 100644
--- a/arch/s390/include/asm/cpu_mf.h
+++ b/arch/s390/include/asm/cpu_mf.h
@@ -213,18 +213,14 @@ static inline int stcctm5(u64 num, u64 *val)
/* Query sampling information */
static inline int qsi(struct hws_qsi_info_block *info)
{
- int cc;
- cc = 1;
+ int cc = 1;
asm volatile(
- "0: .insn s,0xb2860000,0(%1)\n"
+ "0: .insn s,0xb2860000,%1\n"
"1: lhi %0,0\n"
"2:\n"
EX_TABLE(0b, 2b) EX_TABLE(1b, 2b)
- : "=d" (cc), "+a" (info)
- : "m" (*info)
- : "cc", "memory");
-
+ : "+d" (cc), "+Q" (*info));
return cc ? -EINVAL : 0;
}