diff mbox series

[kvm-unit-tests,2/5] lib: s390x: sigp: Dirty CC before sigp execution

Message ID 20240108132921.255769-3-frankja@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series s390x: Dirty cc before executing tested instructions | expand

Commit Message

Janosch Frank Jan. 8, 2024, 1:29 p.m. UTC
Dirtying the CC allows us to find missing CC changes when sigp is
emulated.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
 lib/s390x/asm/sigp.h | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/lib/s390x/asm/sigp.h b/lib/s390x/asm/sigp.h
index 61d2c625..d73be1ef 100644
--- a/lib/s390x/asm/sigp.h
+++ b/lib/s390x/asm/sigp.h
@@ -49,13 +49,17 @@  static inline int sigp(uint16_t addr, uint8_t order, unsigned long parm,
 		       uint32_t *status)
 {
 	register unsigned long reg1 asm ("1") = parm;
+	uint64_t spm_cc = SIGP_CC_NOT_OPERATIONAL << SPM_CC_SHIFT;
 	int cc;
 
 	asm volatile(
+		"	spm	%[spm_cc]\n"
 		"	sigp	%1,%2,0(%3)\n"
 		"	ipm	%0\n"
 		"	srl	%0,28\n"
-		: "=d" (cc), "+d" (reg1) : "d" (addr), "a" (order) : "cc");
+		: "=d" (cc), "+d" (reg1)
+		: "d" (addr), "a" (order), [spm_cc] "d" (spm_cc)
+		: "cc");
 	if (status)
 		*status = reg1;
 	return cc;