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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 = {
 | 
			
		||||
		.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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
					struct kvm_vcpu *dst_vcpu,
 | 
			
		||||
					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 */
 | 
			
		||||
	s_asn = dst_vcpu->arch.sie_block->gcr[3] & 0xffff;  /* Secondary ASN */
 | 
			
		||||
 | 
			
		||||
	/* Deliver the emergency signal? */
 | 
			
		||||
	/* Inject the emergency signal? */
 | 
			
		||||
	if (!(flags & CPUSTAT_STOPPED)
 | 
			
		||||
	    || (psw->mask & psw_int_mask) != psw_int_mask
 | 
			
		||||
	    || ((flags & CPUSTAT_WAIT) && psw->addr != 0)
 | 
			
		||||
	    || (!(flags & CPUSTAT_WAIT) && (asn == p_asn || asn == s_asn))) {
 | 
			
		||||
		return __sigp_emergency(vcpu, dst_vcpu);
 | 
			
		||||
		return __inject_sigp_emergency(vcpu, dst_vcpu);
 | 
			
		||||
	} else {
 | 
			
		||||
		*reg &= 0xffffffff00000000UL;
 | 
			
		||||
		*reg |= SIGP_STATUS_INCORRECT_STATE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue