|
@@ -270,10 +270,12 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
|
|
restore_fp_regs(&vcpu->arch.guest_fpregs);
|
|
|
restore_access_regs(vcpu->arch.guest_acrs);
|
|
|
gmap_enable(vcpu->arch.gmap);
|
|
|
+ atomic_set_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
|
|
|
}
|
|
|
|
|
|
void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
+ atomic_clear_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
|
|
|
gmap_disable(vcpu->arch.gmap);
|
|
|
save_fp_regs(&vcpu->arch.guest_fpregs);
|
|
|
save_access_regs(vcpu->arch.guest_acrs);
|
|
@@ -301,7 +303,9 @@ static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
- atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH | CPUSTAT_SM);
|
|
|
+ atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
|
|
|
+ CPUSTAT_SM |
|
|
|
+ CPUSTAT_STOPPED);
|
|
|
vcpu->arch.sie_block->ecb = 6;
|
|
|
vcpu->arch.sie_block->eca = 0xC1002001U;
|
|
|
vcpu->arch.sie_block->fac = (int) (long) facilities;
|
|
@@ -428,7 +432,7 @@ static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
|
|
|
- if (atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_RUNNING)
|
|
|
+ if (!(atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_STOPPED))
|
|
|
rc = -EBUSY;
|
|
|
else {
|
|
|
vcpu->run->psw_mask = psw.mask;
|
|
@@ -501,7 +505,7 @@ rerun_vcpu:
|
|
|
if (vcpu->sigset_active)
|
|
|
sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
|
|
|
|
|
|
- atomic_set_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
|
|
|
+ atomic_clear_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
|
|
|
|
|
|
BUG_ON(vcpu->kvm->arch.float_int.local_int[vcpu->vcpu_id] == NULL);
|
|
|
|