Whenever we set the SIGP status in the status register, we have to wipe out
the lower 4 bytes and keep the higher 4 bytes. Also the condition code will
always be set to STATUS_STORED.
Let's introduce the wrapper for SigpInfo, as this will avoid most duplicate
code in the future.
Reviewed-by: Thomas Huth <[email protected]>
Reviewed-by: Cornelia Huck <[email protected]>
Signed-off-by: Jens Freimann <[email protected]>
Signed-off-by: David Hildenbrand <[email protected]>
Message-Id: <
1424783731[email protected]>
Signed-off-by: Christian Borntraeger <[email protected]>
uint64_t *status_reg;
} SigpInfo;
+static void set_sigp_status(SigpInfo *si, uint64_t status)
+{
+ *si->status_reg &= 0xffffffff00000000ULL;
+ *si->status_reg |= status;
+ si->cc = SIGP_CC_STATUS_STORED;
+}
+
static void sigp_start(void *arg)
{
SigpInfo *si = arg;
break;
default:
DPRINTF("KVM: unknown SIGP: 0x%x\n", order);
- *status_reg &= 0xffffffff00000000ULL;
- *status_reg |= SIGP_STAT_INVALID_ORDER;
- si.cc = SIGP_CC_STATUS_STORED;
+ set_sigp_status(&si, SIGP_STAT_INVALID_ORDER);
}
return si.cc;