These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / s390 / kvm / sigp.c
index 72e58bd..77c22d6 100644 (file)
@@ -205,9 +205,6 @@ static int __sigp_set_prefix(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu,
                *reg &= 0xffffffff00000000UL;
                *reg |= SIGP_STATUS_INCORRECT_STATE;
                return SIGP_CC_STATUS_STORED;
-       } else if (rc == 0) {
-               VCPU_EVENT(vcpu, 4, "set prefix of cpu %02x to %x",
-                          dst_vcpu->vcpu_id, irq.u.prefix.address);
        }
 
        return rc;
@@ -294,12 +291,8 @@ static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code,
                           u16 cpu_addr, u32 parameter, u64 *status_reg)
 {
        int rc;
-       struct kvm_vcpu *dst_vcpu;
-
-       if (cpu_addr >= KVM_MAX_VCPUS)
-               return SIGP_CC_NOT_OPERATIONAL;
+       struct kvm_vcpu *dst_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr);
 
-       dst_vcpu = kvm_get_vcpu(vcpu->kvm, cpu_addr);
        if (!dst_vcpu)
                return SIGP_CC_NOT_OPERATIONAL;
 
@@ -371,7 +364,8 @@ static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code,
        return rc;
 }
 
-static int handle_sigp_order_in_user_space(struct kvm_vcpu *vcpu, u8 order_code)
+static int handle_sigp_order_in_user_space(struct kvm_vcpu *vcpu, u8 order_code,
+                                          u16 cpu_addr)
 {
        if (!vcpu->kvm->arch.user_sigp)
                return 0;
@@ -414,9 +408,8 @@ static int handle_sigp_order_in_user_space(struct kvm_vcpu *vcpu, u8 order_code)
        default:
                vcpu->stat.instruction_sigp_unknown++;
        }
-
-       VCPU_EVENT(vcpu, 4, "sigp order %u: completely handled in user space",
-                  order_code);
+       VCPU_EVENT(vcpu, 3, "SIGP: order %u for CPU %d handled in userspace",
+                  order_code, cpu_addr);
 
        return 1;
 }
@@ -435,7 +428,7 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu)
                return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
 
        order_code = kvm_s390_get_base_disp_rs(vcpu, NULL);
-       if (handle_sigp_order_in_user_space(vcpu, order_code))
+       if (handle_sigp_order_in_user_space(vcpu, order_code, cpu_addr))
                return -EOPNOTSUPP;
 
        if (r1 % 2)
@@ -481,7 +474,7 @@ int kvm_s390_handle_sigp_pei(struct kvm_vcpu *vcpu)
        trace_kvm_s390_handle_sigp_pei(vcpu, order_code, cpu_addr);
 
        if (order_code == SIGP_EXTERNAL_CALL) {
-               dest_vcpu = kvm_get_vcpu(vcpu->kvm, cpu_addr);
+               dest_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr);
                BUG_ON(dest_vcpu == NULL);
 
                kvm_s390_vcpu_wakeup(dest_vcpu);