diff options
author | Christian Borntraeger <borntraeger@de.ibm.com> | 2013-01-08 16:23:10 +0100 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2013-01-10 17:53:40 -0200 |
commit | 83987ace22f541964bd0dbf83a3f6b0014ba3e1e (patch) | |
tree | 993883209b2b0a03e64cfe3282c29b1dbe7170be /arch/s390 | |
parent | ecf02a607bd801e742d7bb35c6e40f7ca15edf03 (diff) | |
download | talos-obmc-linux-83987ace22f541964bd0dbf83a3f6b0014ba3e1e.tar.gz talos-obmc-linux-83987ace22f541964bd0dbf83a3f6b0014ba3e1e.zip |
s390/kvm: Fix BUG in include/linux/kvm_host.h:745
commit b080935c8638e08134629d0a9ebdf35669bec14d
kvm: Directly account vtime to system on guest switch
also removed the irq_disable/enable around kvm guest switch, which
is correct in itself. Unfortunately, there is a BUG ON that (correctly)
checks for preemptible to cover the call to rcu later on.
(Introduced with commit 8fa2206821953a50a3a02ea33fcfb3ced2fd9997
KVM: make guest mode entry to be rcu quiescent state)
This check might trigger depending on the kernel config.
Lets make sure that no preemption happens during kvm_guest_enter.
We can enable preemption again after the call to
rcu_virt_note_context_switch returns.
Please note that we continue to run s390 guests with interrupts
enabled.
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
CC: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index c9011bfaabbe..f090e819bf71 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -613,7 +613,9 @@ static int __vcpu_run(struct kvm_vcpu *vcpu) kvm_s390_deliver_pending_interrupts(vcpu); vcpu->arch.sie_block->icptcode = 0; + preempt_disable(); kvm_guest_enter(); + preempt_enable(); VCPU_EVENT(vcpu, 6, "entering sie flags %x", atomic_read(&vcpu->arch.sie_block->cpuflags)); trace_kvm_s390_sie_enter(vcpu, |