All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Tosatti <mtosatti@redhat.com>
To: Alex Davis <alex14641@yahoo.com>
Cc: kvm-devel@lists.sourceforge.net, avi@qumranet.com
Subject: Re: Second KVM process hangs eating 80-100% CPU on host during startup
Date: Sat, 19 Apr 2008 20:11:20 -0300	[thread overview]
Message-ID: <20080419231120.GA1176@dmt> (raw)
In-Reply-To: <628016.43885.qm@web50204.mail.re2.yahoo.com>

On Sat, Apr 19, 2008 at 03:47:31PM -0700, Alex Davis wrote:
> --- On Fri, 4/18/08, Avi Kivity <avi@qumranet.com> wrote:
> 
> > From: Avi Kivity <avi@qumranet.com>
> > Subject: Re: [kvm-devel] Second KVM process hangs eating 80-100% CPU on host during startup
> [snip]
> 
> I tried booting the guest with 'lpj=10682525' to work around the 
> calibrate_delay issue, but that gave me:
> 
> [    0.004100] ENABLING IO-APIC IRQs
> [    0.004100] ..TIMER: vector=0x31 apic1=0 pin1=0 apic2=-1 pin2=-1
> [    0.004100] ..MP-BIOS bug: 8254 timer not connected to IO-APIC
> [    0.004100] ...trying to set up timer (IRQ0) through the 8259A ... failed.
> [    0.004100] ...trying to set up timer as Virtual Wire IRQ ... failed.
> [    0.004100] ...trying to set up timer as ExtINT IRQ ... failed :(.
> [    0.004100] Kernel panic - not syncing: IO-APIC + timer doesn't work! Boot
> with apic=debug and send a report.Then try booting with the 'noapic' option.
> 
> Booting with 'apic=debug' gives these additional lines:
> [    0.004100] Getting VERSION: 50014
> [    0.004100] Getting VERSION: 50014
> [    0.004100] Getting ID: 0
> [    0.004100] Getting LVT0: 700
> [    0.004100] Getting LVT1: 10000

Hi Alex,

Can you please try the following.

KVM: PIT: make last_injected_time per-guest

Otherwise multiple guests use the same variable and boom.

Also use kvm_vcpu_kick() to make sure that if a timer triggers on 
a different CPU the event won't be missed.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>


diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
index 2852dd1..5697ad2 100644
--- a/arch/x86/kvm/i8254.c
+++ b/arch/x86/kvm/i8254.c
@@ -200,10 +200,8 @@ int __pit_timer_fn(struct kvm_kpit_state *ps)
 
 	atomic_inc(&pt->pending);
 	smp_mb__after_atomic_inc();
-	if (vcpu0 && waitqueue_active(&vcpu0->wq)) {
-		vcpu0->arch.mp_state = KVM_MP_STATE_RUNNABLE;
-		wake_up_interruptible(&vcpu0->wq);
-	}
+	if (vcpu0)
+		kvm_vcpu_kick(vcpu0);
 
 	pt->timer.expires = ktime_add_ns(pt->timer.expires, pt->period);
 	pt->scheduled = ktime_to_ns(pt->timer.expires);
@@ -572,7 +570,6 @@ void kvm_inject_pit_timer_irqs(struct kvm_vcpu *vcpu)
 	struct kvm_pit *pit = vcpu->kvm->arch.vpit;
 	struct kvm *kvm = vcpu->kvm;
 	struct kvm_kpit_state *ps;
-	static unsigned long last_injected_time;
 
 	if (vcpu && pit) {
 		ps = &pit->pit_state;
@@ -582,11 +579,11 @@ void kvm_inject_pit_timer_irqs(struct kvm_vcpu *vcpu)
 		 * 2. Last interrupt was accepted or waited for too long time*/
 		if (atomic_read(&ps->pit_timer.pending) &&
 		    (ps->inject_pending ||
-		    (jiffies - last_injected_time
+		    (jiffies - ps->last_injected_time
 				>= KVM_MAX_PIT_INTR_INTERVAL))) {
 			ps->inject_pending = 0;
 			__inject_pit_timer_intr(kvm);
-			last_injected_time = jiffies;
+			ps->last_injected_time = jiffies;
 		}
 	}
 }
diff --git a/arch/x86/kvm/i8254.h b/arch/x86/kvm/i8254.h
index e63ef38..db25c2a 100644
--- a/arch/x86/kvm/i8254.h
+++ b/arch/x86/kvm/i8254.h
@@ -35,6 +35,7 @@ struct kvm_kpit_state {
 	struct mutex lock;
 	struct kvm_pit *pit;
 	bool inject_pending; /* if inject pending interrupts */
+	unsigned long last_injected_time;
 };
 
 struct kvm_pit {

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone

  reply	other threads:[~2008-04-19 23:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-16 16:30 Second KVM process hangs eating 80-100% CPU on host during startup Alex Davis
2008-04-18 16:12 ` Avi Kivity
2008-04-18 22:44   ` Alex Davis
2008-04-19  4:19   ` Alex Davis
2008-04-19 22:47   ` Alex Davis
2008-04-19 23:11     ` Marcelo Tosatti [this message]
2008-04-20  0:08       ` Alex Davis
  -- strict thread matches above, loose matches on Subject: below --
2008-04-16 19:52 Alex Davis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080419231120.GA1176@dmt \
    --to=mtosatti@redhat.com \
    --cc=alex14641@yahoo.com \
    --cc=avi@qumranet.com \
    --cc=kvm-devel@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.