summaryrefslogtreecommitdiffstats
path: root/target-s390x/kvm.c
diff options
context:
space:
mode:
authorDavid Hildenbrand <dahi@linux.vnet.ibm.com>2015-02-24 14:15:25 +0100
committerChristian Borntraeger <borntraeger@de.ibm.com>2015-03-10 09:26:22 +0100
commit36b5c84556f38421c43ee4ff213f7ab64fd66a51 (patch)
tree026a8c5fcb0b6e0123ab7ac88f149df90adcf82f /target-s390x/kvm.c
parent22740e3fc0856b2b6e66c91056a7026f87f51482 (diff)
downloadhqemu-36b5c84556f38421c43ee4ff213f7ab64fd66a51.zip
hqemu-36b5c84556f38421c43ee4ff213f7ab64fd66a51.tar.gz
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>
Diffstat (limited to 'target-s390x/kvm.c')
-rw-r--r--target-s390x/kvm.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index aaf703e..28d26c1 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -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;
OpenPOWER on IntegriCloud