@@ -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;
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(-)