s390x/kvm: helper to set the SIGP status in SigpInfo
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 <thuth@linux.vnet.ibm.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com> Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Message-Id: <1424783731-43426-5-git-send-email-jfrei@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
22740e3fc0
commit
36b5c84556
@ -1118,6 +1118,13 @@ typedef struct SigpInfo {
|
||||
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;
|
||||
@ -1202,9 +1209,7 @@ static int handle_sigp_single_dst(S390CPU *dst_cpu, uint8_t order,
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user