kvm-s390.c (60dd57c7479418e2bc902143eb46a2fdcfeecbbb) kvm-s390.c (67cf68b6a5ccac8bc7dfef0a220b59af4c83fd2c)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * hosting IBM Z kernel virtual machines (s390x)
4 *
5 * Copyright IBM Corp. 2008, 2020
6 *
7 * Author(s): Carsten Otte <cotte@de.ibm.com>
8 * Christian Borntraeger <borntraeger@de.ibm.com>

--- 2473 unchanged lines hidden (view full) ---

2482 mutex_lock(&kvm->slots_lock);
2483 r = kvm_s390_set_cmma_bits(kvm, &args);
2484 mutex_unlock(&kvm->slots_lock);
2485 break;
2486 }
2487 case KVM_S390_PV_COMMAND: {
2488 struct kvm_pv_cmd args;
2489
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * hosting IBM Z kernel virtual machines (s390x)
4 *
5 * Copyright IBM Corp. 2008, 2020
6 *
7 * Author(s): Carsten Otte <cotte@de.ibm.com>
8 * Christian Borntraeger <borntraeger@de.ibm.com>

--- 2473 unchanged lines hidden (view full) ---

2482 mutex_lock(&kvm->slots_lock);
2483 r = kvm_s390_set_cmma_bits(kvm, &args);
2484 mutex_unlock(&kvm->slots_lock);
2485 break;
2486 }
2487 case KVM_S390_PV_COMMAND: {
2488 struct kvm_pv_cmd args;
2489
2490 /* protvirt means user sigp */
2491 kvm->arch.user_cpu_state_ctrl = 1;
2490 /* protvirt means user cpu state */
2491 kvm_s390_set_user_cpu_state_ctrl(kvm);
2492 r = 0;
2493 if (!is_prot_virt_host()) {
2494 r = -EINVAL;
2495 break;
2496 }
2497 if (copy_from_user(&args, argp, sizeof(args))) {
2498 r = -EFAULT;
2499 break;

--- 858 unchanged lines hidden (view full) ---

3358 gmap_remove(vcpu->arch.gmap);
3359out_free_sie_block:
3360 free_page((unsigned long)(vcpu->arch.sie_block));
3361 return rc;
3362}
3363
3364int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
3365{
2492 r = 0;
2493 if (!is_prot_virt_host()) {
2494 r = -EINVAL;
2495 break;
2496 }
2497 if (copy_from_user(&args, argp, sizeof(args))) {
2498 r = -EFAULT;
2499 break;

--- 858 unchanged lines hidden (view full) ---

3358 gmap_remove(vcpu->arch.gmap);
3359out_free_sie_block:
3360 free_page((unsigned long)(vcpu->arch.sie_block));
3361 return rc;
3362}
3363
3364int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
3365{
3366 clear_bit(vcpu->vcpu_idx, vcpu->kvm->arch.gisa_int.kicked_mask);
3366 return kvm_s390_vcpu_has_irq(vcpu, 0);
3367}
3368
3369bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu)
3370{
3371 return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE);
3372}
3373

--- 422 unchanged lines hidden (view full) ---

3796int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
3797 struct kvm_mp_state *mp_state)
3798{
3799 int rc = 0;
3800
3801 vcpu_load(vcpu);
3802
3803 /* user space knows about this interface - let it control the state */
3367 return kvm_s390_vcpu_has_irq(vcpu, 0);
3368}
3369
3370bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu)
3371{
3372 return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE);
3373}
3374

--- 422 unchanged lines hidden (view full) ---

3797int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
3798 struct kvm_mp_state *mp_state)
3799{
3800 int rc = 0;
3801
3802 vcpu_load(vcpu);
3803
3804 /* user space knows about this interface - let it control the state */
3804 vcpu->kvm->arch.user_cpu_state_ctrl = 1;
3805 kvm_s390_set_user_cpu_state_ctrl(vcpu->kvm);
3805
3806 switch (mp_state->mp_state) {
3807 case KVM_MP_STATE_STOPPED:
3808 rc = kvm_s390_vcpu_stop(vcpu);
3809 break;
3810 case KVM_MP_STATE_OPERATING:
3811 rc = kvm_s390_vcpu_start(vcpu);
3812 break;

--- 1312 unchanged lines hidden ---
3806
3807 switch (mp_state->mp_state) {
3808 case KVM_MP_STATE_STOPPED:
3809 rc = kvm_s390_vcpu_stop(vcpu);
3810 break;
3811 case KVM_MP_STATE_OPERATING:
3812 rc = kvm_s390_vcpu_start(vcpu);
3813 break;

--- 1312 unchanged lines hidden ---