diff options
Diffstat (limited to 'arch/s390/kvm/kvm-s390.c')
| -rw-r--r-- | arch/s390/kvm/kvm-s390.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 0bd3bea1e4c..d1c44573245 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -65,6 +65,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {  	{ "instruction_stfl", VCPU_STAT(instruction_stfl) },  	{ "instruction_tprot", VCPU_STAT(instruction_tprot) },  	{ "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) }, +	{ "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },  	{ "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },  	{ "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },  	{ "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) }, @@ -127,6 +128,7 @@ int kvm_dev_ioctl_check_extension(long ext)  	switch (ext) {  	case KVM_CAP_S390_PSW:  	case KVM_CAP_S390_GMAP: +	case KVM_CAP_SYNC_MMU:  		r = 1;  		break;  	default: @@ -270,10 +272,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 +305,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 +434,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 +507,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);  |