KVM: s390: Add helper function for setting condition code
authorThomas Huth <thuth@linux.vnet.ibm.com>
Fri, 26 Jul 2013 13:04:06 +0000 (15:04 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 29 Jul 2013 07:03:45 +0000 (09:03 +0200)
Introduced a helper function for setting the CC in the
guest PSW to improve the readability of the code.

Signed-off-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/s390/kvm/kvm-s390.h
arch/s390/kvm/priv.c

index faa4df6..dc99f1c 100644 (file)
@@ -115,6 +115,13 @@ static inline u64 kvm_s390_get_base_disp_rs(struct kvm_vcpu *vcpu)
        return (base2 ? vcpu->run->s.regs.gprs[base2] : 0) + disp2;
 }
 
+/* Set the condition code in the guest program status word */
+static inline void kvm_s390_set_psw_cc(struct kvm_vcpu *vcpu, unsigned long cc)
+{
+       vcpu->arch.sie_block->gpsw.mask &= ~(3UL << 44);
+       vcpu->arch.sie_block->gpsw.mask |= cc << 44;
+}
+
 int kvm_s390_handle_wait(struct kvm_vcpu *vcpu);
 enum hrtimer_restart kvm_s390_idle_wakeup(struct hrtimer *timer);
 void kvm_s390_tasklet(unsigned long parm);
index 697e34b..8f8d8ee 100644 (file)
@@ -163,8 +163,7 @@ static int handle_tpi(struct kvm_vcpu *vcpu)
        kfree(inti);
 no_interrupt:
        /* Set condition code and we're done. */
-       vcpu->arch.sie_block->gpsw.mask &= ~(3ul << 44);
-       vcpu->arch.sie_block->gpsw.mask |= (cc & 3ul) << 44;
+       kvm_s390_set_psw_cc(vcpu, cc);
        return 0;
 }
 
@@ -219,8 +218,7 @@ static int handle_io_inst(struct kvm_vcpu *vcpu)
                 * Set condition code 3 to stop the guest from issueing channel
                 * I/O instructions.
                 */
-               vcpu->arch.sie_block->gpsw.mask &= ~(3ul << 44);
-               vcpu->arch.sie_block->gpsw.mask |= (3 & 3ul) << 44;
+               kvm_s390_set_psw_cc(vcpu, 3);
                return 0;
        }
 }
@@ -383,7 +381,7 @@ static int handle_stsi(struct kvm_vcpu *vcpu)
                return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
 
        if (fc > 3) {
-               vcpu->arch.sie_block->gpsw.mask |= 3ul << 44;     /* cc 3 */
+               kvm_s390_set_psw_cc(vcpu, 3);
                return 0;
        }
 
@@ -393,7 +391,7 @@ static int handle_stsi(struct kvm_vcpu *vcpu)
 
        if (fc == 0) {
                vcpu->run->s.regs.gprs[0] = 3 << 28;
-               vcpu->arch.sie_block->gpsw.mask &= ~(3ul << 44);  /* cc 0 */
+               kvm_s390_set_psw_cc(vcpu, 0);
                return 0;
        }
 
@@ -427,12 +425,11 @@ static int handle_stsi(struct kvm_vcpu *vcpu)
        }
        trace_kvm_s390_handle_stsi(vcpu, fc, sel1, sel2, operand2);
        free_page(mem);
-       vcpu->arch.sie_block->gpsw.mask &= ~(3ul << 44);
+       kvm_s390_set_psw_cc(vcpu, 0);
        vcpu->run->s.regs.gprs[0] = 0;
        return 0;
 out_no_data:
-       /* condition code 3 */
-       vcpu->arch.sie_block->gpsw.mask |= 3ul << 44;
+       kvm_s390_set_psw_cc(vcpu, 3);
 out_exception:
        free_page(mem);
        return rc;