Skip to content

Commit

Permalink
KVM: s390: optimize interrupt handling round trip time
Browse files Browse the repository at this point in the history
We can avoid checking guest control registers and guest PSW as well
as all the masking and calculations on the interrupt masks when
no interrupts are pending.

Also, the check for IRQ_PEND_COUNT can be removed, because we won't
enter the while loop if no interrupts are pending and invalid interrupt
types can't be injected.

Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Dominik Dingel <dingel@linux.vnet.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
  • Loading branch information
Jens Freimann authored and Christian Borntraeger committed May 8, 2015
1 parent 27406cd commit ffeca0a
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions arch/s390/kvm/interrupt.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ static unsigned long deliverable_irqs(struct kvm_vcpu *vcpu)

active_mask = pending_local_irqs(vcpu);
active_mask |= pending_floating_irqs(vcpu);
if (!active_mask)
return 0;

if (psw_extint_disabled(vcpu))
active_mask &= ~IRQ_PEND_EXT_MASK;
Expand Down Expand Up @@ -941,12 +943,9 @@ int __must_check kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu)
if (cpu_timer_irq_pending(vcpu))
set_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);

do {
irqs = deliverable_irqs(vcpu);
while ((irqs = deliverable_irqs(vcpu)) && !rc) {
/* bits are in the order of interrupt priority */
irq_type = find_first_bit(&irqs, IRQ_PEND_COUNT);
if (irq_type == IRQ_PEND_COUNT)
break;
if (is_ioirq(irq_type)) {
rc = __deliver_io(vcpu, irq_type);
} else {
Expand All @@ -958,9 +957,7 @@ int __must_check kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu)
}
rc = func(vcpu);
}
if (rc)
break;
} while (!rc);
}

set_intercept_indicators(vcpu);

Expand Down

0 comments on commit ffeca0a

Please sign in to comment.