|
Miroslav Franc |
dcbf1c |
From: Heiko Carstens <hca@linux.ibm.com>
|
|
Miroslav Franc |
dcbf1c |
Date: Thu, 11 May 2023 17:04:41 +0200
|
|
Miroslav Franc |
dcbf1c |
Subject: s390/qdio: fix do_sqbs() inline assembly constraint
|
|
Miroslav Franc |
dcbf1c |
Git-commit: 2862a2fdfae875888e3c1c3634e3422e01d98147
|
|
Miroslav Franc |
dcbf1c |
Patch-mainline: v6.4-rc3
|
|
Miroslav Franc |
dcbf1c |
References: git-fixes bsc#1211693
|
|
Miroslav Franc |
dcbf1c |
|
|
Miroslav Franc |
dcbf1c |
Use "a" constraint instead of "d" constraint to pass the state parameter to
|
|
Miroslav Franc |
dcbf1c |
the do_sqbs() inline assembly. This prevents that general purpose register
|
|
Miroslav Franc |
dcbf1c |
zero is used for the state parameter.
|
|
Miroslav Franc |
dcbf1c |
|
|
Miroslav Franc |
dcbf1c |
If the compiler would select general purpose register zero this would be
|
|
Miroslav Franc |
dcbf1c |
problematic for the used instruction in rsy format: the register used for
|
|
Miroslav Franc |
dcbf1c |
the state parameter is a base register. If the base register is general
|
|
Miroslav Franc |
dcbf1c |
purpose register zero the contents of the register are unexpectedly ignored
|
|
Miroslav Franc |
dcbf1c |
when the instruction is executed.
|
|
Miroslav Franc |
dcbf1c |
|
|
Miroslav Franc |
dcbf1c |
This only applies to z/VM guests using QIOASSIST with dedicated (pass through)
|
|
Miroslav Franc |
dcbf1c |
QDIO-based devices such as FCP [zfcp driver] as well as real OSA or
|
|
Miroslav Franc |
dcbf1c |
HiperSockets [qeth driver].
|
|
Miroslav Franc |
dcbf1c |
|
|
Miroslav Franc |
dcbf1c |
A possible symptom for this case using zfcp is the following repeating kernel
|
|
Miroslav Franc |
dcbf1c |
message pattern:
|
|
Miroslav Franc |
dcbf1c |
|
|
Miroslav Franc |
dcbf1c |
zfcp <devbusid>: A QDIO problem occurred
|
|
Miroslav Franc |
dcbf1c |
zfcp <devbusid>: A QDIO problem occurred
|
|
Miroslav Franc |
dcbf1c |
zfcp <devbusid>: qdio: ZFCP on SC <sc> using AI:1 QEBSM:1 PRI:1 TDD:1 SIGA: W
|
|
Miroslav Franc |
dcbf1c |
zfcp <devbusid>: A QDIO problem occurred
|
|
Miroslav Franc |
dcbf1c |
zfcp <devbusid>: A QDIO problem occurred
|
|
Miroslav Franc |
dcbf1c |
|
|
Miroslav Franc |
dcbf1c |
Each of the qdio problem message can be accompanied by the following entries
|
|
Miroslav Franc |
dcbf1c |
for the affected subchannel <sc> in
|
|
Miroslav Franc |
dcbf1c |
/sys/kernel/debug/s390dbf/qdio_error/hex_ascii for zfcp or qeth:
|
|
Miroslav Franc |
dcbf1c |
|
|
Miroslav Franc |
dcbf1c |
<sc> ccq: 69....
|
|
Miroslav Franc |
dcbf1c |
<sc> SQBS ERROR.
|
|
Miroslav Franc |
dcbf1c |
|
|
Miroslav Franc |
dcbf1c |
Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
|
|
Miroslav Franc |
dcbf1c |
Cc: Steffen Maier <maier@linux.ibm.com>
|
|
Miroslav Franc |
dcbf1c |
Fixes: 8129ee164267 ("[PATCH] s390: qdio V=V pass-through")
|
|
Miroslav Franc |
dcbf1c |
Cc: <stable@vger.kernel.org>
|
|
Miroslav Franc |
dcbf1c |
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
|
|
Miroslav Franc |
dcbf1c |
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
|
|
Miroslav Franc |
dcbf1c |
Acked-by: Miroslav Franc <mfranc@suse.cz>
|
|
Miroslav Franc |
dcbf1c |
---
|
|
Miroslav Franc |
dcbf1c |
drivers/s390/cio/qdio.h | 2 +-
|
|
Miroslav Franc |
dcbf1c |
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
Miroslav Franc |
dcbf1c |
|
|
Miroslav Franc |
dcbf1c |
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
|
|
Miroslav Franc |
dcbf1c |
index 5ea6249d8180..641f0dbb65a9 100644
|
|
Miroslav Franc |
dcbf1c |
--- a/drivers/s390/cio/qdio.h
|
|
Miroslav Franc |
dcbf1c |
+++ b/drivers/s390/cio/qdio.h
|
|
Miroslav Franc |
dcbf1c |
@@ -95,7 +95,7 @@ static inline int do_sqbs(u64 token, unsigned char state, int queue,
|
|
Miroslav Franc |
dcbf1c |
" lgr 1,%[token]\n"
|
|
Miroslav Franc |
dcbf1c |
" .insn rsy,0xeb000000008a,%[qs],%[ccq],0(%[state])"
|
|
Miroslav Franc |
dcbf1c |
: [ccq] "+&d" (_ccq), [qs] "+&d" (_queuestart)
|
|
Miroslav Franc |
dcbf1c |
- : [state] "d" ((unsigned long)state), [token] "d" (token)
|
|
Miroslav Franc |
dcbf1c |
+ : [state] "a" ((unsigned long)state), [token] "d" (token)
|
|
Miroslav Franc |
dcbf1c |
: "memory", "cc", "1");
|
|
Miroslav Franc |
dcbf1c |
*count = _ccq & 0xff;
|
|
Miroslav Franc |
dcbf1c |
*start = _queuestart & 0xff;
|
|
Miroslav Franc |
dcbf1c |
|