mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-05-02 05:13:57 +00:00
KVM: s390: sigp: inject emergency calls in a separate function
In preparation for further code changes, this patch moves the injection of emergency calls into a separate function and uses it for the processing of SIGP EMERGENCY CALL and SIGP CONDITIONAL EMERGENCY CALL. Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
42cb0c9ff9
commit
07b0303540
1 changed files with 9 additions and 3 deletions
|
@ -46,7 +46,8 @@ static int __sigp_sense(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu,
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu)
|
static int __inject_sigp_emergency(struct kvm_vcpu *vcpu,
|
||||||
|
struct kvm_vcpu *dst_vcpu)
|
||||||
{
|
{
|
||||||
struct kvm_s390_interrupt s390int = {
|
struct kvm_s390_interrupt s390int = {
|
||||||
.type = KVM_S390_INT_EMERGENCY,
|
.type = KVM_S390_INT_EMERGENCY,
|
||||||
|
@ -62,6 +63,11 @@ static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu)
|
||||||
return rc ? rc : SIGP_CC_ORDER_CODE_ACCEPTED;
|
return rc ? rc : SIGP_CC_ORDER_CODE_ACCEPTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu)
|
||||||
|
{
|
||||||
|
return __inject_sigp_emergency(vcpu, dst_vcpu);
|
||||||
|
}
|
||||||
|
|
||||||
static int __sigp_conditional_emergency(struct kvm_vcpu *vcpu,
|
static int __sigp_conditional_emergency(struct kvm_vcpu *vcpu,
|
||||||
struct kvm_vcpu *dst_vcpu,
|
struct kvm_vcpu *dst_vcpu,
|
||||||
u16 asn, u64 *reg)
|
u16 asn, u64 *reg)
|
||||||
|
@ -76,12 +82,12 @@ static int __sigp_conditional_emergency(struct kvm_vcpu *vcpu,
|
||||||
p_asn = dst_vcpu->arch.sie_block->gcr[4] & 0xffff; /* Primary ASN */
|
p_asn = dst_vcpu->arch.sie_block->gcr[4] & 0xffff; /* Primary ASN */
|
||||||
s_asn = dst_vcpu->arch.sie_block->gcr[3] & 0xffff; /* Secondary ASN */
|
s_asn = dst_vcpu->arch.sie_block->gcr[3] & 0xffff; /* Secondary ASN */
|
||||||
|
|
||||||
/* Deliver the emergency signal? */
|
/* Inject the emergency signal? */
|
||||||
if (!(flags & CPUSTAT_STOPPED)
|
if (!(flags & CPUSTAT_STOPPED)
|
||||||
|| (psw->mask & psw_int_mask) != psw_int_mask
|
|| (psw->mask & psw_int_mask) != psw_int_mask
|
||||||
|| ((flags & CPUSTAT_WAIT) && psw->addr != 0)
|
|| ((flags & CPUSTAT_WAIT) && psw->addr != 0)
|
||||||
|| (!(flags & CPUSTAT_WAIT) && (asn == p_asn || asn == s_asn))) {
|
|| (!(flags & CPUSTAT_WAIT) && (asn == p_asn || asn == s_asn))) {
|
||||||
return __sigp_emergency(vcpu, dst_vcpu);
|
return __inject_sigp_emergency(vcpu, dst_vcpu);
|
||||||
} else {
|
} else {
|
||||||
*reg &= 0xffffffff00000000UL;
|
*reg &= 0xffffffff00000000UL;
|
||||||
*reg |= SIGP_STATUS_INCORRECT_STATE;
|
*reg |= SIGP_STATUS_INCORRECT_STATE;
|
||||||
|
|
Loading…
Add table
Reference in a new issue