|
@@ -20,19 +20,18 @@
|
|
|
static int __sigp_sense(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu,
|
|
|
u64 *reg)
|
|
|
{
|
|
|
- int cpuflags;
|
|
|
+ const bool stopped = kvm_s390_test_cpuflags(dst_vcpu, CPUSTAT_STOPPED);
|
|
|
int rc;
|
|
|
int ext_call_pending;
|
|
|
|
|
|
- cpuflags = atomic_read(&dst_vcpu->arch.sie_block->cpuflags);
|
|
|
ext_call_pending = kvm_s390_ext_call_pending(dst_vcpu);
|
|
|
- if (!(cpuflags & CPUSTAT_STOPPED) && !ext_call_pending)
|
|
|
+ if (!stopped && !ext_call_pending)
|
|
|
rc = SIGP_CC_ORDER_CODE_ACCEPTED;
|
|
|
else {
|
|
|
*reg &= 0xffffffff00000000UL;
|
|
|
if (ext_call_pending)
|
|
|
*reg |= SIGP_STATUS_EXT_CALL_PENDING;
|
|
|
- if (cpuflags & CPUSTAT_STOPPED)
|
|
|
+ if (stopped)
|
|
|
*reg |= SIGP_STATUS_STOPPED;
|
|
|
rc = SIGP_CC_STATUS_STORED;
|
|
|
}
|
|
@@ -205,11 +204,9 @@ static int __sigp_store_status_at_addr(struct kvm_vcpu *vcpu,
|
|
|
struct kvm_vcpu *dst_vcpu,
|
|
|
u32 addr, u64 *reg)
|
|
|
{
|
|
|
- int flags;
|
|
|
int rc;
|
|
|
|
|
|
- flags = atomic_read(&dst_vcpu->arch.sie_block->cpuflags);
|
|
|
- if (!(flags & CPUSTAT_STOPPED)) {
|
|
|
+ if (!kvm_s390_test_cpuflags(dst_vcpu, CPUSTAT_STOPPED)) {
|
|
|
*reg &= 0xffffffff00000000UL;
|
|
|
*reg |= SIGP_STATUS_INCORRECT_STATE;
|
|
|
return SIGP_CC_STATUS_STORED;
|
|
@@ -236,8 +233,7 @@ static int __sigp_sense_running(struct kvm_vcpu *vcpu,
|
|
|
return SIGP_CC_STATUS_STORED;
|
|
|
}
|
|
|
|
|
|
- if (atomic_read(&dst_vcpu->arch.sie_block->cpuflags) &
|
|
|
- CPUSTAT_RUNNING) {
|
|
|
+ if (kvm_s390_test_cpuflags(dst_vcpu, CPUSTAT_RUNNING)) {
|
|
|
/* running */
|
|
|
rc = SIGP_CC_ORDER_CODE_ACCEPTED;
|
|
|
} else {
|