summaryrefslogtreecommitdiffstats
path: root/include/asm-s390
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2008-05-07 09:22:53 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2008-05-07 09:23:01 +0200
commit0eaeafa10f3b2bd027e95859a6785d4c7fcc174c (patch)
tree97676107c28393326944bd3d922e7eeaa5caf942 /include/asm-s390
parent2688905e6a9b3647bf7b452cb0ff2bdb166bd8fe (diff)
downloadlinux-0eaeafa10f3b2bd027e95859a6785d4c7fcc174c.tar.gz
linux-0eaeafa10f3b2bd027e95859a6785d4c7fcc174c.tar.bz2
linux-0eaeafa10f3b2bd027e95859a6785d4c7fcc174c.zip
[S390] s390-kvm: leave sie context on work. Removes preemption requirement
From: Martin Schwidefsky <schwidefsky@de.ibm.com> This patch fixes a bug with cpu bound guest on kvm-s390. Sometimes it was impossible to deliver a signal to a spinning guest. We used preemption as a circumvention. The preemption notifiers called vcpu_load, which checked for pending signals and triggered a host intercept. But even with preemption, a sigkill was not delivered immediately. This patch changes the low level host interrupt handler to check for the SIE instruction, if TIF_WORK is set. In that case we change the instruction pointer of the return PSW to rerun the vcpu_run loop. The kvm code sees an intercept reason 0 if that happens. This patch adds accounting for these types of intercept as well. The advantages: - works with and without preemption - signals are delivered immediately - much better host latencies without preemption Acked-by: Carsten Otte <cotte@de.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'include/asm-s390')
-rw-r--r--include/asm-s390/kvm_host.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/asm-s390/kvm_host.h b/include/asm-s390/kvm_host.h
index f8204a4f2e02..18cbd8a39796 100644
--- a/include/asm-s390/kvm_host.h
+++ b/include/asm-s390/kvm_host.h
@@ -104,6 +104,7 @@ struct sie_block {
struct kvm_vcpu_stat {
u32 exit_userspace;
+ u32 exit_null;
u32 exit_external_request;
u32 exit_external_interrupt;
u32 exit_stop_request;