aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/s390/kvm/sigp.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c
index 9ee63e4d8a24..1b330d4eb20b 100644
--- a/arch/s390/kvm/sigp.c
+++ b/arch/s390/kvm/sigp.c
@@ -46,7 +46,8 @@ static int __sigp_sense(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu,
46 return rc; 46 return rc;
47} 47}
48 48
49static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu) 49static int __inject_sigp_emergency(struct kvm_vcpu *vcpu,
50 struct kvm_vcpu *dst_vcpu)
50{ 51{
51 struct kvm_s390_interrupt s390int = { 52 struct kvm_s390_interrupt s390int = {
52 .type = KVM_S390_INT_EMERGENCY, 53 .type = KVM_S390_INT_EMERGENCY,
@@ -62,6 +63,11 @@ static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu)
62 return rc ? rc : SIGP_CC_ORDER_CODE_ACCEPTED; 63 return rc ? rc : SIGP_CC_ORDER_CODE_ACCEPTED;
63} 64}
64 65
66static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu)
67{
68 return __inject_sigp_emergency(vcpu, dst_vcpu);
69}
70
65static int __sigp_conditional_emergency(struct kvm_vcpu *vcpu, 71static int __sigp_conditional_emergency(struct kvm_vcpu *vcpu,
66 struct kvm_vcpu *dst_vcpu, 72 struct kvm_vcpu *dst_vcpu,
67 u16 asn, u64 *reg) 73 u16 asn, u64 *reg)
@@ -76,12 +82,12 @@ static int __sigp_conditional_emergency(struct kvm_vcpu *vcpu,
76 p_asn = dst_vcpu->arch.sie_block->gcr[4] & 0xffff; /* Primary ASN */ 82 p_asn = dst_vcpu->arch.sie_block->gcr[4] & 0xffff; /* Primary ASN */
77 s_asn = dst_vcpu->arch.sie_block->gcr[3] & 0xffff; /* Secondary ASN */ 83 s_asn = dst_vcpu->arch.sie_block->gcr[3] & 0xffff; /* Secondary ASN */
78 84
79 /* Deliver the emergency signal? */ 85 /* Inject the emergency signal? */
80 if (!(flags & CPUSTAT_STOPPED) 86 if (!(flags & CPUSTAT_STOPPED)
81 || (psw->mask & psw_int_mask) != psw_int_mask 87 || (psw->mask & psw_int_mask) != psw_int_mask
82 || ((flags & CPUSTAT_WAIT) && psw->addr != 0) 88 || ((flags & CPUSTAT_WAIT) && psw->addr != 0)
83 || (!(flags & CPUSTAT_WAIT) && (asn == p_asn || asn == s_asn))) { 89 || (!(flags & CPUSTAT_WAIT) && (asn == p_asn || asn == s_asn))) {
84 return __sigp_emergency(vcpu, dst_vcpu); 90 return __inject_sigp_emergency(vcpu, dst_vcpu);
85 } else { 91 } else {
86 *reg &= 0xffffffff00000000UL; 92 *reg &= 0xffffffff00000000UL;
87 *reg |= SIGP_STATUS_INCORRECT_STATE; 93 *reg |= SIGP_STATUS_INCORRECT_STATE;