aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorCarsten Otte <cotte@de.ibm.com>2008-05-21 13:37:37 +0200
committerAvi Kivity <avi@qumranet.com>2008-06-06 21:08:26 +0300
commit0ff318674503ce3787ef62d84f4d948db204b268 (patch)
tree7e3f964df1961aa858bbaf28aa2d455d156cdcc9 /arch/s390
parent71cde5879f10b639506bc0b9f29a89f58b42a17e (diff)
downloadkernel_goldelico_gta04-0ff318674503ce3787ef62d84f4d948db204b268.zip
kernel_goldelico_gta04-0ff318674503ce3787ef62d84f4d948db204b268.tar.gz
kernel_goldelico_gta04-0ff318674503ce3787ef62d84f4d948db204b268.tar.bz2
KVM: s390: fix interrupt delivery
The current code delivers pending interrupts before it checks for need_resched. On a busy host, this can lead to a longer interrupt latency if the interrupt is injected while the process is scheduled away. This patch moves delivering the interrupt _after_ schedule(), which makes more sense. Signed-off-by: Carsten Otte <cotte@de.ibm.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/kvm/kvm-s390.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 40e4f2d..ded27c7 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -435,6 +435,8 @@ static void __vcpu_run(struct kvm_vcpu *vcpu)
if (test_thread_flag(TIF_MCCK_PENDING))
s390_handle_mcck();
+ kvm_s390_deliver_pending_interrupts(vcpu);
+
vcpu->arch.sie_block->icptcode = 0;
local_irq_disable();
kvm_guest_enter();
@@ -480,7 +482,6 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
might_sleep();
do {
- kvm_s390_deliver_pending_interrupts(vcpu);
__vcpu_run(vcpu);
rc = kvm_handle_sie_intercept(vcpu);
} while (!signal_pending(current) && !rc);