diff options
-rw-r--r-- | arch/s390/kvm/sigp.c | 12 |
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 | ||
49 | static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu) | 49 | static 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 | ||
66 | static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu) | ||
67 | { | ||
68 | return __inject_sigp_emergency(vcpu, dst_vcpu); | ||
69 | } | ||
70 | |||
65 | static int __sigp_conditional_emergency(struct kvm_vcpu *vcpu, | 71 | static 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; |