aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Kivity <avi@qumranet.com>2008-01-15 11:27:32 -0500
committerAvi Kivity <avi@qumranet.com>2008-01-30 11:01:22 -0500
commit6c14280125a374d4c279a68276f97245e03e3f68 (patch)
tree9a562a81927810f5e1ef38b05c109129a19b93cd
parent97db56ce6cc2a0766b536cc227a1da20acc5d82f (diff)
KVM: Fix unbounded preemption latency
When preparing to enter the guest, if an interrupt comes in while preemption is disabled but interrupts are still enabled, we miss a preemption point. Fix by explicitly checking whether we need to reschedule. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Avi Kivity <avi@qumranet.com>
-rw-r--r--arch/x86/kvm/x86.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 77d57ff3d74e..f0493e7dcf0c 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -2535,6 +2535,13 @@ again:
2535 2535
2536 local_irq_disable(); 2536 local_irq_disable();
2537 2537
2538 if (need_resched()) {
2539 local_irq_enable();
2540 preempt_enable();
2541 r = 1;
2542 goto out;
2543 }
2544
2538 if (signal_pending(current)) { 2545 if (signal_pending(current)) {
2539 local_irq_enable(); 2546 local_irq_enable();
2540 preempt_enable(); 2547 preempt_enable();